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

标签 c if-statement character logical-operators

如何在不使用“if”的情况下将 C 中的字符与其他字符进行比较 有很多'||'? 例如,假设我有一个名为“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() 也将匹配隐含的尾随 NUL 终止符 ('\0')。如果这是一个问题,您可以显式比较此值。由于从头开始搜索输入字符串,您可能希望在开头有更多可能的值。

请注意,strchr 确实会返回一个指向匹配字符的指针;就在您需要的时候。

如果您可以对值进行分组,例如“字母”、“数字”等,看看ctype.h .

如果值是变量,您可以在比较之前将它们复制到 char 数组中(不要忘记终止符!)或将它们保存在无论如何数组: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!
    }
}

您可以将其打包到一个函数中,并在各处进行一些修饰。

关于将字符与C中的多个字符进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31037573/

相关文章:

c - gcc 的 -Wc90-c99-compat 标志如何工作?

if-statement - IF 和 WHERE 的等价

javascript - Javascript 如何检查两个字符串是否包含相同的字符?

c - 嵌套循环 Cuda C

c - 删除列表中的第一个元素

c - 如何读取二进制文件并将数据存储在C中的指针处

Javascript 在这种情况下使用 IF 或 SWITCH 或 "dynamic function name"的最佳做法是什么

java - 使用扫描仪的 RPN 计算器,If/Else 语句不读取

css - 为什么 firefox 对某些字符着色,有解决方法吗?

r - 用cat()和paste()串联字符串之间有什么区别?