У меня есть GtkEntry, где пользователь должен ввести номер IP или имя хоста. Когда кнопка нажата, то, что пользователь ввел в запись, добавляется к символу. Как я могу программно проверить, содержит ли этот символ пробелы, символ новой строки или символ табуляции? Мне не нужно их удалять, просто чтобы знать, существуют ли они. Заранее спасибо!
Linux / C Проверить, содержит ли символ пробелы, символ новой строки или символ табуляции
Ответы (5)
Вам нужна функция strpbrk().
#include <stdio.h>
#include <string.h>
int check_whitespace (char *str)
{
char key[] = { ' ', '\n', '\t', 0 };
return strpbrk (str, key);
}
Взгляните на процедуры классификации символов: man isspace
.
char
- это 8-битное целое число, обычно содержащее код ASCII для одной буквы. char*
– это указатель на массив из них, который используется как строка в C. Упомянутые функции классификации работают с отдельными символами, а не со строками. .
- person Nikolai Fetissov; 25.06.2010
Создайте массив символов, содержащий интересующие символы. Затем используйте strchr() для поиска наличия char в строке.
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
}
Предположим, вы имеете в виду, что то, что вводится в GtkEntry, добавляется к массиву char (строка, в терминологии C, при условии, что она оканчивается нулем). Затем, чтобы проверить, содержит ли этот массив символов хотя бы один или несколько символов «пробел» (в соответствии с локалью, поэтому мы используем 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
который можно превратить, например, в функцию.
Вы можете рассмотреть функцию, подобную следующей, которая подсчитывает количество символов пробела в заданной строке, выдавая положительное целое число, если они найдены (т.е. ИСТИНА), ноль, если ничего не найдено (т.е. ЛОЖЬ) и -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;
}
char
— это одиночный символ в некоторой компактной и простой кодировке (обычно ASCII). То, о чем вы спрашиваете, - это строка (часто помогает вchar[]
илиchar*
). Кроме того, вы недооценили проблему. Я считаю, что вы хотите удалить или игнорировать (какие?) начальные и конечные пробелы и проверить, есть ли какие-либо внутренние пробелы. Нет? - person dmckee --- ex-moderator kitten   schedule 25.06.2010