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

use*_*033 2 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;
 }
Run Code Online (Sandbox Code Playgroud)

基本上它会检查字符串中除列出的字符之外的任何字符,如果找到,则返回false.有更简单的功能吗?

Pav*_*aev 20

您想要标准库函数strspn:

strspn(str, " *(12axb") == strlen(str);
Run Code Online (Sandbox Code Playgroud)

它会计算字符,str直到它看到第一个不是第二个参数中的一个字符.因此,如果它没有找到任何不匹配的字符,它将返回字符串的长度.

编写相同的更快的方法,虽然可能不太清楚,但是检查\0而不是调用strlen:

str[strspn(str, " *(12axb")] == '\0';
Run Code Online (Sandbox Code Playgroud)