检查C中的不同字符

问题描述 投票:0回答:3

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

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

您需要具有a == '\n' || a == '\t' || ...的无尽链。我想知道是否有一种更短(更简洁)的符号列表相等性检查方法,因为当您使用a而不是更具描述性的代码时,此代码变得一团糟。另外,如果您能向我解释为什么第一部分是错误的,我将不胜感激。

c char c-strings kernighan-and-ritchie
3个回答
2
投票

只需编写类似于以下的函数

#include <string.h>

//...

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

    return c != '\0' && strchr( s, c ) != NULL;
}

您可以在if语句中使用相同的表达式。如果您知道选中的字符不是零字符,则只有您可以删除具有零字符的比较。

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

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

1
投票

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

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

您的尝试不起作用的原因是,因为||运算符正在使用布尔OR运算来组合其所有操作数,并返回布尔值。如果x || yx不为零,则y为真。因此,您的测试基本上等同于

if (a == 1)

0
投票

您可以使用strchr函数,该函数检查给定字符串(可以是字符串文字)中字符的首次出现。如果找到not,则该函数返回strchr(零)值。

因此,在您的情况下,您可以这样做:

NULL

((您需要在源中的某个位置if (strchr("\n\t ,.;:!?", a) == NULL) { // Action when NOT found } else { // Action when found } 才能使用此功能。)

© www.soinside.com 2019 - 2024. All rights reserved.