将字符与C中的多个字符进行比较

如何比较C中的字符与其他字符,而不使用’if’和吨’||’? 例如,假设我有一个名为’i’的字符,我想要与其他8个字符进行比较,这些字符之间没有任何关联,如果’i’等于这8个字符中的至少一个,则表达式为真。 像这样的东西:

if(i == c1 || i == c2 || i == c2 ........){ /* do stuff */} 

但是在一个大的应用程序中,这些比较很多,而不仅仅是3或8.有没有一种聪明而快速的方法来实现这样的东西,而不是最终看起来丑陋的代码? 先感谢您。

假设你的'c1' ,…只是一个char常量,你可以使用:

 if ( strchr("12345", ch) != NULL ) ... 

(“12345”是c1c2 ,……)

但是, 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! } } 

你可以将它打包成一个带有一些装饰的function。