我想知道c中是否有一种方法可以检查,例如在for函数中,变量是否等于或不等于某些字符,而不必每次都重复相等检查。如果我没看错,则用这种方法检查相等性是不正确的:
if (a == ('\n' || '\t' || ' ' || ',' || '.' || ';' || ':' || '!' || '?')) {
execute certain action;
}
您需要具有a == '\n' || a == '\t' || ...
的无尽链。我想知道是否有一种更短(更简洁)的符号列表相等性检查方法,因为当您使用a
而不是更具描述性的代码时,此代码变得一团糟。另外,如果您能向我解释为什么第一部分是错误的,我将不胜感激。
只需编写类似于以下的函数
#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
}
您可以使用strchr()
搜索字符串中的字符。
if (strchr("\n\t ,.;:!?", a) != NULL) {
// execute certain action
}
您的尝试不起作用的原因是,因为||
运算符正在使用布尔OR
运算来组合其所有操作数,并返回布尔值。如果x || y
或x
不为零,则y
为真。因此,您的测试基本上等同于
if (a == 1)
您可以使用strchr
函数,该函数检查给定字符串(可以是字符串文字)中字符的首次出现。如果找到not,则该函数返回strchr
(零)值。
因此,在您的情况下,您可以这样做:
NULL
((您需要在源中的某个位置if (strchr("\n\t ,.;:!?", a) == NULL) {
// Action when NOT found
}
else {
// Action when found
}
才能使用此功能。)