检查 C 中的不同字符

Checking for different characters in C

我想知道在 c 中是否有一种方法可以检查,例如在 for 函数中,如果变量等于或不等于某些字符,而不必每次都重复进行相等性检查。 如果我没记错的话,这样检查相等性是不正确的:

if (a == ('\n' || '\t' || ' ' || ',' || '.' || ';' || ':' || '!' || '?')) {
     execute certain action;
}

你需要有一个无穷无尽的 a == '\n' || a == '\t' || ... 链。我想知道是否有更短(更清晰)的方法来检查符号列表的相等性,因为当 a 不是 a 你有更具描述性的东西时,这段代码会变得一团糟。 另外,如果你能向我解释为什么第一部分是错误的,我将不胜感激。

写个类似下面的函数就可以了

#include <string.h>

//...

int is_separatison( char c )
{
    const char *s = "n\t ,.;:!?";

    return c != '[=10=]' && strchr( s, c ) != NULL;
}

您可以在 if 语句中使用相同的表达式。只有知道勾选的字符不是零字符,才能去掉与零字符的比较。

const char *s = "n\t ,.;:!?";

if ( strchr( s, c ) != NULL )
{
    // do something
}

至于你展示的if语句,则改写成

if ( a == '\n' || a == '\t' || a == ' ' || a == ',' || 
     a == '.'  || a ==';'   || a == ':' || a == '!' || a == '?' )  {

您可以使用strchr() 来搜索字符串中的字符。

#include <string.h>

if (strchr("\n\t ,.;:!?", a) != NULL) {
    // execute certain action
}

您的尝试不起作用的原因是 || 运算符使用布尔运算 OR 组合其所有操作数,而 returns 是一个布尔值。如果 xy 非零,则 x || y 为真。所以你的测试本质上等同于

if (a == 1)

您可以使用 strchr 函数,该函数检查给定字符串(可以是字符串文字)中某个字符的第一次出现。如果没有找到,函数returns一个NULL(零)值。

因此,对于您的情况,您可以这样做:

if (strchr("\n\t ,.;:!?", a) == NULL) {
    // Action when NOT found
}
else {
    // Action when found
}

(您需要 #include <string.h> 源代码中的某处才能使用此功能。)