У меня есть GtkEntry, где пользователь должен ввести номер IP или имя хоста. Когда кнопка нажата, то, что пользователь ввел в запись, добавляется к символу. Как я могу программно проверить, содержит ли этот символ пробелы, символ новой строки или символ табуляции? Мне не нужно их удалять, просто чтобы знать, существуют ли они. Заранее спасибо!
Вопрос
Linux / C Проверить, содержит ли символ пробелы, символ новой строки или символ табуляции
- Здесь у вас проблема с терминологией: char - это одиночный символ в некоторой компактной и простой кодировке (обычно ASCII). То, о чем вы спрашиваете, - это строка (часто помогает в char[] или char*). Кроме того, вы недооценили проблему. Я считаю, что вы хотите удалить или игнорировать (какие?) начальные и конечные пробелы и проверить, есть ли какие-либо внутренние пробелы. Нет? dmckee --- ex-moderator kitten 25.06.2010
Ответы
Ответ 1 · рейтинг 3 · PauliL
Вам нужна функция strpbrk().
#include <stdio.h>
#include <string.h>
int check_whitespace (char *str)
{
char key[] = { ' ', '\n', '\t', 0 };
return strpbrk (str, key);
}
Ответ 2 · рейтинг 6 · Nikolai Fetissov
Взгляните на процедуры классификации символов: man isspace.
Ответ 3 · рейтинг 4 · Amardeep AC9MF
Создайте массив символов, содержащий интересующие символы. Затем используйте 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
}
Ответ 4 · ShinTakezou
Предположим, вы имеете в виду, что то, что вводится в 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
который можно превратить, например, в функцию.
Ответ 5 · bjg
Вы можете рассмотреть функцию, подобную следующей, которая подсчитывает количество символов пробела в заданной строке, выдавая положительное целое число, если они найдены (т.е. ИСТИНА), ноль, если ничего не найдено (т.е. ЛОЖЬ) и -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;
}
Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.
Похожие материалы
- Ошибка ошибки сегмента при доступе к глобальному указателю из функции
- Минимизировать задержку ввода мыши в настольном приложении GL?
- Определить в C не работает, когда ввод составной
- Сообщение об ошибке, если я попытаюсь скопировать один массив в другой в C
- Вкладки пользовательского интерфейса Jquery, контрольная переменная длина, затрачиваемая на каждую вкладку?
- Delphi Получение 'Ctrl Tab' и 'Ctrl Shift Tab' в приложении