在C中切换语句

前端之家收集整理的这篇文章主要介绍了在C中切换语句前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有以下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 */

实际上,如果按字母顺序对表进行排序,甚至可以使用bsearch()进行快速匹配.

猜你在找的C&C++相关文章