Обнаружение, состоит ли строка только из пробелов? - PullRequest
2 голосов
/ 10 мая 2011

Какой самый эффективный / самый безопасный способ проверить, состоит ли строка в C только из пробелов?Нужно ли писать саму функцию для проверки, или в string.h есть такая, которую я могу использовать?

Ответы [ 4 ]

5 голосов
/ 10 мая 2011

Попробуйте это:

if (!s[strspn(s, " ")]) /* it's all spaces */

Если вы также хотите включить вкладки, новые строки и т. Д. В определение «пробелов», просто добавьте их ко второму аргументу strspn.

5 голосов
/ 10 мая 2011

Ну, написание собственного тривиально:

int IsSpaces( char * s ) {

    while ( * s ) {
        if ( ! isspace( * s ) ) {
            return 0;
        }
        s++;
    }
    return 1;
}

Все, что вы используете из стандартной библиотеки, вряд ли будет намного более эффективным.

1 голос
/ 10 мая 2011

man string.h привел меня на следующую страницу руководства.

NAME strspn, strcspn - поиск строки для набора символов

СИНТАКСИС

   #include <string.h>

   size_t strspn(const char *s, const char *accept);

   size_t strcspn(const char *s, const char *reject);

ОПИСАНИЕ

  • Функция strspn () вычисляет длина начального сегмента s который состоит исключительно из символов в принятии.

  • Функция strcspn () вычисляет длина начального сегмента s который состоит полностью из символы не отклоняются.

1 голос
/ 10 мая 2011

Когда вы говорите пробел, вы имеете в виду точно или символ пробела?

Однако такой функции не существует, хотя она работает:

int isonlyspaces(char *str) {
    while (*str++ == ' ');
    return --str == '\0';
}

Если вы имеете в видупробел между символами вместо буквального пробела, эта версия подходит:

int isonlyspaces(char *str) {
    while (isspace(*str++));
    return --str == '\0';
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...