在C中切换语句

前端之家收集整理的这篇文章主要介绍了在C中切换语句前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有以下if语句:
  1. if (strcmp(registerName,"zero"))
  2. return 00000;
  3. else if (strcmp(registerName,"at"))
  4. return 00001;
  5. else if (strcmp(registerName,"v0"))
  6. return 00010;
  7. else if (strcmp(registerName,"v1"))
  8. return 00011;

它实际上很长 – 大约20个if语句.因此,我想使用一个开关.当每个语句具有不同的条件时,如何将其转换为切换?

我尝试了下面的代码,但它不起作用:

  1. int registerAddress;
  2.  
  3. switch(registerAddress) {
  4.  
  5. case 1 (strcmp(registerName,"zero")):
  6. regsiterAddress = 00000;
  7. break;
  8. case 2 (strcmp(registerName,"at")):
  9. registerAddress = 00001;
  10. break;
  11. }

解决方法

你不能 – 在C中切换语句只适用于基本类型,而不是字符串.您可以使用哈希表或搜索树来优化匹配,但只有20个选项可能不值得.

您可以做的是清理代码,设置映射表:

  1. struct str2Num {
  2. char *str;
  3. int num;
  4. };
  5.  
  6. const struct str2Num registerMap[] = {
  7. { "zero",00000 },{ "at",00001 },{ "v0",00010 },{ "v1",00011 },{ NULL,0 } /* end marker */
  8. };

并按照以下方式进行匹配:

  1. int i;
  2. for (i = 0; registerMap[i].str != NULL; i++) {
  3. if (strcmp(registerName,registerMap[i].str) == 0) {
  4. return registerMap[i].num;
  5. }
  6. }
  7. /* handle no-match case here */

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

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