Linux / C Проверьте, содержит ли символ пробелы, символ новой строки или символ табуляции - PullRequest
1 голос
/ 25 июня 2010

У меня есть GtkEntry, где пользователь должен ввести номер IP или имя хоста.Когда кнопка нажата, то, что пользователь ввел в запись, добавляется к символу.Как программно проверить, содержит ли этот символ пробелы, символ новой строки или символ табуляции?Мне не нужно их удалять, просто чтобы знать, существуют ли они.Заранее спасибо!

Ответы [ 5 ]

6 голосов
/ 25 июня 2010

Взгляните на процедуры классификации символов: man isspace.

4 голосов
/ 25 июня 2010

Создать массив символов, содержащий символы, представляющие интерес. Затем используйте strchr (), чтобы найти наличие символа в строке.

char charSet[] = { ' ', '\n', '\t', 0 };
char c;

// code that puts a character in c

if (strchr(charSet, c) != NULL)
{
    // it is one of the set
}
2 голосов
/ 25 июня 2010

Функция, которую вы ищете: strpbrk () .

#include <stdio.h>
#include <string.h>

int check_whitespace (char *str)
{
  char key[] = { ' ', '\n', '\t', 0 };
  return strpbrk (str, key);
}
0 голосов
/ 25 июня 2010

Вы можете рассмотреть такую ​​функцию, как следующая, которая подсчитывает количество пробельных символов в данной строке, дающее положительное целое число, если оно найдено (т. Е. ИСТИНА), ноль, если ничего не найдено (т. Е. FALSE), и -1 при ошибке .

#include <ctype.h>
static int
ws_count(char *s)
{
    int n = -1;
    if (s != NULL) {
        char *p;
        for (n = 0, p = s; *p != '\0'; p++) {
            if (isspace(*p)) {
                n++;
            }
        }
    }
    return n;
}
0 голосов
/ 25 июня 2010

Предположим, вы имеете в виду, что то, что введено в GtkEntry, добавляется в массив char (строка в терминологии C, при условии, что она завершена нулем). Затем, чтобы проверить, содержит ли этот массив char хотя бы один или несколько символов пробела (в зависимости от локали, поэтому мы используем isspace),

char *array;
int i;
//..
bool contains_space = false;
for(i = 0; i < strlen(array); i++) {
  if ( isspace(array[i]) ) {
    contains_space = true;
    break;
  }
}
// return contains_space

, который можно превратить в функцию, например.

...