将字符与C中的多个字符进行比较
Compare character with multiple characters in C
如何在不使用 '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 终止符 ('[=17=]'
)。如果这是一个问题,您可以显式比较此值。由于从头开始搜索输入字符串,您可能希望在开头有更多可能的值。
注意 strchr
return 指向匹配字符的指针;就在你需要的时候。
如果您可以对值进行分组,例如"letters"、"digits"等,看看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!
}
}
您可以将其打包到函数中,并在各处进行一些修饰。
如何在不使用 '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 终止符 ('[=17=]'
)。如果这是一个问题,您可以显式比较此值。由于从头开始搜索输入字符串,您可能希望在开头有更多可能的值。
注意 strchr
return 指向匹配字符的指针;就在你需要的时候。
如果您可以对值进行分组,例如"letters"、"digits"等,看看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!
}
}
您可以将其打包到函数中,并在各处进行一些修饰。