Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Linux / C Проверить, содержит ли символ пробелы, символ новой строки или символ табуляции

Автор вопроса: CommunityОтветов: 5

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

  • Здесь у вас проблема с терминологией: char - это одиночный символ в некоторой компактной и простой кодировке (обычно ASCII). То, о чем вы спрашиваете, - это строка (часто помогает в char[] или char*). Кроме того, вы недооценили проблему. Я считаю, что вы хотите удалить или игнорировать (какие?) начальные и конечные пробелы и проверить, есть ли какие-либо внутренние пробелы. Нет? dmckee --- ex-moderator kitten 25.06.2010

ctabsnewlinecharspaces

Ответы

Ответ 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.

Похожие материалы