Как найти пробел в строке c
Перейти к содержимому

Как найти пробел в строке c

  • автор:

Поиск пробела в строке

При нахождение пробела в строке нужно завершить программу.

Что именно не так делаю?

0xdb's user avatar

Salvador's user avatar

1) Здесь не нужен цикл. 2) find возвращает не bool , а число. string::npos если значение не найдено.

Что бы завершить программу, можно использовать функцию exit например.

Потому что вы используете s.find() в цикле — поэтому вы будете получать ответ столько раз, сколько у вас символов в строке.

Функция find библиотеки string ищет последовательность заданных символов в заданной строке, и возвращает позицию первого вхождения.

Как написать функцию поиска пробела в строке?

Вроде написал, вроде как работает. Но кажется что это такое себе решение. Подскажите как решить данную задачу более правильней. Нужно вернуть указатель на первый найденный пробел, иначе если не найден пробел вернуть NULL.

Или вот так. Но все равно как то такое себе кажется.

  • Вопрос задан более трёх лет назад
  • 1108 просмотров

Простой 9 комментариев

https://amdy.su/wp-admin/options-general.php?page=ad-inserter.php#tab-8
  • Facebook
  • Вконтакте
  • Twitter

Евгений Шатунов, return &str[i]; вот так надо да?

PS. хотя не. Опять не то.

dandropov95 , а ты не думал над тем, что const char* тоже можно использовать чтобы итерироваться по строке?
Вообще говоря, твоя последняя реализация уже, кажется, делает то, что тебе хочется. Но реализация понимается еще хуже чем изначальный вариант. На одном for с одним возвратом результата код будет пониматься легче.
const char* — это хорошо. Твоя функция должна быть чистой, т.к. ее ожидаемая суть заключается только в поиске.

А что будет если функцию вызвать так: find_space( nullptr ); ?
Что будет если функцию вызвать так: find_space( «» ); ?

dandropov95 , а касты к char* для чего? Это же явно нарушает принцип чистоты функции.
Увы, тут видно что ты стоишь на месте. При чем с самого первого варианта. Значит надо подкинуть тебе идею.
Посмотри вот на такой вариант.

cursor сразу дает всею полезную информацию о состоянии цикла. Из него, при должном обращении, и индекс символа можно вынуть.
Попробуй плясать от такого подхода.

getline проверяет, является ли строка пробелом

Есть ли простой способ проверить, пуста ли строка. Поэтому я хочу проверить, содержит ли он пробелы, такие как \r\n\t и пробелы.

9 ответов

Вы можете использовать isspace Функция в цикле, чтобы проверить, все ли символы являются пробелами:

Эта функция вернет 0, если какой-либо символ не является пробелом (т. Е. Строка не пустая), или 1 в противном случае.

Если строка s состоит только из пробелов strspn(s, » \r\n\t») вернет длину строки. Поэтому простой способ проверить это strspn(s, » \r\n\t») == strlen(s) но это пересечет строку дважды. Вы также можете написать простую функцию, которая будет проходить по строке только один раз:

Я не буду проверять ‘\0’, поскольку ‘\0’ не является пробелом, и цикл на этом заканчивается.

Мое предложение будет:

  1. Зацикливается на символах строки и останавливается, когда
    • либо был найден непробельный символ,
    • или нуль персонаж был посещен.
  2. Там, где указатель строки остановился, проверьте, является ли содержимое строки нулевым символом.

В зависимости от сложности, это линейно с O(n), где n размер входной строки.

Это можно сделать с помощью strspn за один проход (просто логическое выражение):

Учитывая char *x=» «; вот что я могу предложить:

Вы можете использовать sscanf для поиска строки длиной 1 без пробелов. Затем sscanf вернет -1, если найдет только пробелы.

Рассмотрим следующий пример:

Для C++11 вы можете проверить, является ли строка пробелом, используя std::all_of а также isspace (isspace проверяет наличие пробелов, табуляции, новой строки, вертикальной табуляции, перевода строки и возврата каретки:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *