проверка строки на правильность символов в c - PullRequest
2 голосов
/ 07 октября 2009

Есть ли более простой способ сделать следующее в 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;
 }

в основном он проверяет строку на наличие любых символов, отличных от перечисленных, и возвращает ложь, если находит. есть ли более простая функция?

Ответы [ 2 ]

20 голосов
/ 07 октября 2009

Требуется стандартная библиотечная функция strspn:

strspn(str, " *(12axb") == strlen(str);

Он будет считать символы в str, пока не увидит первый, который не является одним из символов во втором аргументе. Таким образом, если он не найдет несовпадающих символов, он вернет длину строки.

Более быстрый способ написать то же самое, хотя, возможно, и менее понятный, это проверить \0 вместо вызова strlen:

str[strspn(str, " *(12axb")] == '\0';
0 голосов
/ 07 октября 2009

Ответ Павла определенно является тем, что вам нужно для вашей конкретной проблемы, но я просто подумал, что добавлю, что для более общей проблемы проверки символов вы также можете очень легко проверить диапазоны символов, если ваши строки ASCII. Например:

if (*str >= '0' || *str <= '9') {
   // *str is a number.
}

Это может быть полезно, если у вас есть много допустимых символов в непрерывном диапазоне. Существует ряд стандартных библиотечных функций (например, isalpha), которые проверяют общие диапазоны для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...