有没有更简单的方法在c中执行以下操作?
unsigned short check_str(char *str)
{
while (*str)
{
if (!(*str == ' ' || *str == '(' || *str == ')' ||
*str == '1' || *str == '2' || *str == 'a' ||
*str == 'x' || *str == 'b'))
return 0;
str++;
}
return 1;
}
基本上它会检查字符串中是否有除列出的字符之外的任何字符,如果找到则返回false。有更简单的功能吗?
答案 0 :(得分:20)
您需要标准库函数strspn
:
strspn(str, " *(12axb") == strlen(str);
它将计算str
中的字符,直到它看到第一个字符不是第二个参数中的一个字符。因此,如果找不到任何不匹配的字符,它将返回字符串的长度。
编写相同内容的更快捷方式(尽管可能不太清楚)是检查\0
而不是调用strlen
:
str[strspn(str, " *(12axb")] == '\0';
答案 1 :(得分:0)
Pavel的答案肯定是你想要解决的特定问题,但我只是想为了更常见的验证字符问题而添加它,如果你的字符串是ASCII,你也可以很容易地检查字符范围。例如:
if (*str >= '0' || *str <= '9') {
// *str is a number.
}
如果在连续范围内有许多有效字符,这可能很有用。有许多标准库函数(例如isalpha)可以检查您的常见范围。