我有以下 if 语句:
if (strcmp(registerName, "zero"))
return 00000;
else if (strcmp(registerName, "at"))
return 00001;
else if (strcmp(registerName, "v0"))
return 00010;
else if (strcmp(registerName, "v1"))
return 00011;
它实际上很长 - 大约 20 个 if 语句。因此,我想使用一个开关。当每个语句都有不同的条件时,我如何将其转换为 switch?
我尝试了下面的代码,但它不起作用:
int registerAddress;
switch(registerAddress) {
case 1 (strcmp(registerName, "zero")):
regsiterAddress = 00000;
break;
case 2 (strcmp(registerName, "at")):
registerAddress = 00001;
break;
}
最佳答案
你不能 — C 中的 switch
语句仅适用于原始类型,不适用于字符串。您可以使用哈希表或搜索树来优化匹配,但对于可能不值得麻烦的只有 20 个选项。
为了清理代码,您可以做的是设置一个映射表:
struct str2Num {
char *str;
int num;
};
const struct str2Num registerMap[] = {
{ "zero", 00000 },
{ "at", 00001 },
{ "v0", 00010 },
{ "v1", 00011 },
{ NULL, 0 } /* end marker */
};
然后像这样进行匹配:
int i;
for (i = 0; registerMap[i].str != NULL; i++) {
if (strcmp(registerName, registerMap[i].str) == 0) {
return registerMap[i].num;
}
}
/* handle no-match case here */
事实上,如果您按字母顺序对表格进行排序,您甚至可以使用 bsearch()
用于快速匹配。
关于c - C 中的 switch 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7839464/