我有以下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语句.因此,我想使用一个开关.当每个语句具有不同的条件时,如何将其转换为切换?
我尝试了下面的代码,但它不起作用:
int registerAddress; switch(registerAddress) { case 1 (strcmp(registerName,"zero")): regsiterAddress = 00000; break; case 2 (strcmp(registerName,"at")): registerAddress = 00001; break; }
解决方法
你不能 – 在C中切换语句只适用于基本类型,而不是字符串.您可以使用哈希表或搜索树来优化匹配,但只有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 */