在c中检查字符串是否有正确的字符

时间:2009-10-06 22:40:03

标签: c string

有没有更简单的方法在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。有更简单的功能吗?

2 个答案:

答案 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)可以检查您的常见范围。