检查 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 是一个布尔值。如果 x
或 y
非零,则 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>
源代码中的某处才能使用此功能。)
我想知道在 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 是一个布尔值。如果 x
或 y
非零,则 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>
源代码中的某处才能使用此功能。)