我可以使这个带有大量OR的if语句更简洁吗?

时间:2017-08-02 00:31:26

标签: c if-statement

我通过做一些随机练习来提升我对C的认识。以下是我计算字符串中元音数量的解决方案的摘录。它有效,但必须有一个更简洁的方式来编写这个if语句。有什么想法吗?

for(int i = 0; i < length; i++) {
    if(input[i] == 'a' || input[i] == 'e' || input[i] == 'i' || input[i] == 'o' || input[i] == 'u') {
        total++;
    }
}

4 个答案:

答案 0 :(得分:5)

您可以使用switch执行此操作,并提供初级案例:

for(int i = 0; i < length; i++) {
    switch (input[i]) {
    case 'a':
    case 'e':
    case 'i':
    case 'o':
    case 'u':
        total++;
        break;
    }
}

答案 1 :(得分:2)

您可以使用库函数strtok来标记输入字符串,如下所示:

pch = strtok (input,"aeiou");
while (pch != NULL)
{
    total++;
    pch = strtok (NULL, "aeiou");
}

请注意,strtok对输入字符串具有破坏性。

答案 2 :(得分:1)

strchr 可让您搜索特定字符的字符串。这似乎是解决问题的合理方法。

未经测试的代码:

char findMe = 'e';
char *vowels="aeiou";
if (strchr(vowels, findMe) != NULL)
{
   print("found\n");
}
else
{
   print("not found");
}

答案 3 :(得分:0)

你可以更好更快地做到这一点 make你想检查的变量数组 Ex char * array = [&#39; i&#39;,&#39; o&#39;,&#39; a&#39;&#39; e&#39;]; 那么

for(int i = 0; i < length; i++) {
   for(int i2 = 0; i2 < length; i2++){
      if(input[i] == array[i2]){
         total++;
      }
  }
}

通过这种方式,您可以添加想要比较的字符数,而不是||陈述和更快。