将字符与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”是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! } }
你可以将它打包成一个带有一些装饰的function。