我有以下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 */