如何在不使用' if'的情况下将C中的字符与其他字符进行比较? 大量的' ||'? 例如,让我说我有一个名为“我'我希望与其他8个没有任何联系的角色进行比较,如果' i'等于这8个字符中的至少一个然后表达式为真。 像这样:
if(i == c1 || i == c2 || i == c2 ........){ /* do stuff */}
但是在一个很大的应用程序中,这些比较很多,而不仅仅是3或8。 有没有一种聪明而快速的方法来实现这样的东西,而不是最终看起来丑陋的代码?提前谢谢。
答案 0 :(得分:3)
假设您的'c1'
,...只是一个char
常量,您可以使用:
if ( strchr("12345", ch) != NULL )
...
(" 12345" c1
,c2
,...)
strchr()
也会匹配implcit尾随NUL终结符('\0'
)。如果这是一个问题,您可以显式比较此值。从开始搜索输入字符串时,您可能希望在开头有更多可支持的值。
注意strchr
会返回指向匹配char的指针;如果你需要的话。
如果您可以对值进行分组,例如"字母","数字"等等,请查看ctype.h。
如果值是变量,您可以在比较之前将它们复制到char
数组中(不要忘记trminator!)或者将它们保存在数组中: array[0]
是c1
,...
如果无法做到这一切,您很可能会遇到strcpy
。你可以用这个:
// assuming there are always the same variables used.
static const char * const ca[] = { &c1, &c2, ... };
char val;
for ( size_t i = 0 ; i < sizeof(ca) / sizeof(ca[0]) ; i++ ) {
if ( *ca[i] == val ) {
// match!
}
}
你可以将它打包成一个带有一些装饰的功能。