Поиск пробела в строке
При нахождение пробела в строке нужно завершить программу.
Что именно не так делаю?
![]()
1) Здесь не нужен цикл. 2) find возвращает не bool , а число. string::npos если значение не найдено.
Что бы завершить программу, можно использовать функцию exit например.
Потому что вы используете s.find() в цикле — поэтому вы будете получать ответ столько раз, сколько у вас символов в строке.
Функция find библиотеки string ищет последовательность заданных символов в заданной строке, и возвращает позицию первого вхождения.
Функция isspace
Функция isspace проверяет параметр сharacter , является ли он символом пробела. Обратите внимание на то,что символ пробела — это, на самом деле, несколько символов.
Для данной функции символами пробела являются следующие символы:
| ‘ ‘ | 0x20 | Символ пробела (SPC) |
| ‘\t’ | 0x09 | Горизонтальная табуляция (TAB) |
| ‘\n’ | 0x0a | Символ новой строки (LF) |
| ‘\v’ | (0x0b) | Вертикальная табуляция (VT) |
| ‘\f’ | (0x0c) | feed (FF) |
| ‘\r’ | (0x0d) | возврат каретки на начало строки (CR) |
Конкретные реализации компилятора или системы могут определить дополнительные пробелы в расширенный набор символов.
Подробно ознакомиться с возвращаемыми результатами функций, для каждого символа стандартного набора символов ASCII вы можете в библиотеке <cctype.h>.
В С++ локализованная версия функции isspace определена в заголовочном файле <locale> .
Параметры:
- character
Символ для проверки, передаётся в функцию как значение типа int , или EOF .
Возвращаемое значение
Значение, отличное от нуля (т.е. истинно), если аргумент функции — это символ пробела.
Ноль (т.е. ложь), в противном случае.
Пример: исходный код программы
Пример работы программы
Эта программа печатает посимвольно строку str , заменяя любой символ пробела символом новой строки.
Как найти пробел в строке c
При нахождение пробела в строке нужно завершить программу.
Что именно не так делаю?
![]()
![]()
1) Здесь не нужен цикл. 2) find возвращает не bool , а число. string::npos если значение не найдено.
Что бы завершить программу, можно использовать функцию exit например.
Потому что вы используете s.find() в цикле — поэтому вы будете получать ответ столько раз, сколько у вас символов в строке.
Функция find библиотеки string ищет последовательность заданных символов в заданной строке, и возвращает позицию первого вхождения.
Как написать функцию поиска пробела в строке?
Вроде написал, вроде как работает. Но кажется что это такое себе решение. Подскажите как решить данную задачу более правильней. Нужно вернуть указатель на первый найденный пробел, иначе если не найден пробел вернуть NULL.
Или вот так. Но все равно как то такое себе кажется.
- Вопрос задан более трёх лет назад
- 1055 просмотров
Простой 9 комментариев
- Вконтакте
Евгений Шатунов, return &str[i]; вот так надо да?
PS. хотя не. Опять не то.
dandropov95 , а ты не думал над тем, что const char* тоже можно использовать чтобы итерироваться по строке?
Вообще говоря, твоя последняя реализация уже, кажется, делает то, что тебе хочется. Но реализация понимается еще хуже чем изначальный вариант. На одном for с одним возвратом результата код будет пониматься легче.
const char* — это хорошо. Твоя функция должна быть чистой, т.к. ее ожидаемая суть заключается только в поиске.
А что будет если функцию вызвать так: find_space( nullptr ); ?
Что будет если функцию вызвать так: find_space( «» ); ?
dandropov95 , а касты к char* для чего? Это же явно нарушает принцип чистоты функции.
Увы, тут видно что ты стоишь на месте. При чем с самого первого варианта. Значит надо подкинуть тебе идею.
Посмотри вот на такой вариант.
cursor сразу дает всею полезную информацию о состоянии цикла. Из него, при должном обращении, и индекс символа можно вынуть.
Попробуй плясать от такого подхода.