如何缩短多重&&条件

Vui*_*inh 11 c c++ algorithm optimization conditional

目前我可以运行我的程序,但我的代码包含很多重复,看起来像:

while(option != 'E' && option != 'D' && option != 'P' && option != 'Q' &&
      option != 'e' && option != 'd' && option != 'p' && option != 'q') {
  // Some code here
}
Run Code Online (Sandbox Code Playgroud)

要么:

while(cType != 'S' && cType != 'L' && cType != 'O' && cType != 'Q' &&
      cType != 's' && cType != 'l' && cType != 'o' && cType != 'q') {
  // Some code here
}
Run Code Online (Sandbox Code Playgroud)

缩短上述代码的最快方法是什么?

(除了使用附加功能有什么办法吗?)

asd*_*sdf 8

const char invalidChars[] = "edpq";
while (strchr(invalidChars, tolower(option)) != 0) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

  • 没有; 全局数组长度为256个字节,可以通过`tolower(option)`直接访问`global_array [(option)]`(或多或少 - 有一些与EOF有关的技巧,所以它可能是257 bytes和`global_array [(option)+1]`),但要点几乎相同.没有搜索 - 只是一个直接阵列访问. (3认同)
  • 您可能错误地使用了"tolower"; 如果`option`是`char`那么它应该是`tolower((unsigned char)选项)`.我建议只在匹配字符串中使用大写字符而不使用tolower (2认同)