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

时间:2015-06-24 21:40:12

标签: c if-statement character logical-operators

如何在不使用' if'的情况下将C中的字符与其他字符进行比较? 大量的' ||'? 例如,让我说我有一个名为“我'我希望与其他8个没有任何联系的角色进行比较,如果' i'等于这8个字符中的至少一个然后表达式为真。 像这样:

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

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

1 个答案:

答案 0 :(得分:3)

假设您的'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!
    }
}

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