switch语句中的C字符串

switch语句中的C字符串,c,switch-statement,C,Switch Statement,可能重复: 字符串(c字符数组)与switch语句一起使用的一般方法是什么?我正在查询数据库中存储为的货币 "USD" "EUR" "GBP" 等等。来自PHP背景,我只想做: switch ($string) { case "USD": return "$"; break; case "EUR": return "€"; break; case "GBP": return "£"; break; default: return

可能重复:

字符串(c字符数组)与switch语句一起使用的一般方法是什么?我正在查询数据库中存储为的货币

"USD"
"EUR"
"GBP"
等等。来自PHP背景,我只想做:

switch ($string) {
  case "USD":
   return "$";
   break;
  case "EUR":
   return "€";
   break;   
  case "GBP":
   return "£";
   break;
  default:
   return "$";
}

在C中,大小写值必须是整数。我如何在C中实现类似的东西?我会在一个巨大的if/else块中写很多strcmp吗?还请注意,我不能简单地比较货币的前几个字符,因为有些(虽然在本例中没有)以相同的字符开头。

一种方法是定义一个C字符串数组,并将其用作您的排序定义:

const char *currencies[] = {"USD", "GBP", "EUR"};
现在,您可以搜索字符串
货币
,并在switch语句中使用其索引


您可以对字符串进行奇特的排序,并使用在
O(LogN)

中查找索引许多语言中的正确答案是某种关联容器<代码> STD::在C++中映射为。Glib中有一个关联数组的C实现:请看,还有其他库也有自己的库。

我建议在这种情况下使用带有strcmp函数的if语句。

谢谢Cody,尽管我在发布问题之前进行了搜索,但我还没有看到这个。另外,请检查C标准库附带的
bsearch()
函数,该函数可用于通过将strcmp作为比较器在有序数组中查找字符串。我认为这种方法是最好的,因为它感觉“干净”。我在这里发布了一个解决方案:如果您能看一看并告诉我这是否是您的想法,我将非常高兴。再次感谢!我的另一个想法是简单地将所有货币编码为数据库中的数值。当然,这只适用于这种特殊情况。@user1288263是的,您的pastebin源正是我想要的。在货币的特定情况下,您可以使用(还有)另一个技巧—将3个字母的货币代码想象为以base-26表示法表示的整数。您可以编写一个函数来从base-26转换,并为要处理的货币转换代码定义整数预处理器常量。@Tibor:正如我所说,Glib有一个C实现,但也许我应该澄清一下。