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

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

  • автор:

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

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

if (s.find(' ') != string::npos)

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

Отслеживать
ответ дан 23 янв 2020 в 13:49
user361068 user361068

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

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

Просто вынесите s.find() из цикла.

Пробелы

Символы пробела, табуляции, перевода строки (новой строки), возврата каретки, перевода страницы и вертикальной табуляции называются пробельными символами, поскольку они выполняют ту же функцию, что и пробелы между словами и строками на печатной странице — они упрощают чтение. Токены разделяются (разграничиваются) пробельными символами и другими токенами, например операторами и символами пунктуации. При синтаксическом анализе кода компилятор C игнорирует пробельные символы — кроме тех случаев, когда они используются как разделители или как компоненты символьных констант или строковых литералов. Используйте пробельные символы, чтобы сделать программу более удобочитаемой. Обратите внимание, что комментарии также обрабатываются компилятором как пробел.

См. также

Обратная связь

Были ли сведения на этой странице полезными?

Обратная связь

Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделе https://aka.ms/ContentUserFeedback.

Отправить и просмотреть отзыв по

Типы данных

Строки Прежде чем пользоваться строковыми операциями и вообще иметь возможность описывать переменные типа string необходимо включить в заголовок программы описание:

Также во всех примерах предполагается, что в начале программы подключено пространство имен std:
using namespace std;
Описание строки полностью аналогично описанию любой другой переменной. Например:
string example_str;

  • Присваивание
  • Сравнение
  • Ввод
  • Запрос длины строки (size, length)
  • Соединение (+)
  • Удаление фрагмента (erase)
  • Вставка фрагмента (insert)
  • Копирование фрагмента (substr)
  • Поиск фрагмента (find)
  • Преобразование к числу (sscanf, sstream)
  • Преобразование числа к строке (sprintf, sstream)
  • Строка как массив символов
  • Примечание(*)

Присваивание строк

Примеры с комментариями:

string example_str = «Do bats eat cats?»; // присваивание при описании example_str = «»; // присваивание пустой строки — // две кавычки рядом, без пробелов work_str = example_str; // присваивание между строками

Помимо этого возможно вот такое присваивание:

char a[50]; example_str = a;

Сравнение строк

Две строки равны друг другу, если у них одинаковые длины и символы на соответствующих местах полностью совпадают (то есть 1-й символ строки A равен 1-му символу строки B, 2-й символ строки A равен 2-му символу строки B и так далее)

Например строка «abc» равна строке «abc», но не равна строке «abcd».

Выяснение какая из строк больше выполняется посимвольно, аналогично алфавитному порядку русского языка. Если строка начинается с символа, чей код больше, что и сама строка больше. Если первые символы одинаковы, то сравниваются вторые символы по тому же правилу. Если и они одинаковы, сравниваются третьи и так далее. Если в процессе сравнения какая-то из строк закончилась, то она меньше другой.

Строку также можно сравнивать с пустой (обозначается двумя кавычками подряд, без пробелов).

while (example_str != «») < // какие-то команды >

Для ввода строк рекомендуется использовать функцию getline(). Данная функция читает строку целиком (с пробелами и прочими символами) до знака перевода строки.

getline(cin, example_str);

Длина строки

Функции size() или length() возвращают целое число — количество символов, которое сейчас находится в строке.

example_str = «Password»; int x = example_str.size(); // после этого фрагмента x = 8
example_str = «»; if (example_str.length() > 0) < // команды этого блока сейчас не выполнятся, // так как длина пустой строки равна 0 >;

Соединение строк

Операция + возвращает строку, получившуюся в результате соединения (дописывания одной строки после конца другой) одной или более строк. Строки соединяются в том порядке, как они указаны в операции.

example_str = «password»; article = «The » comment_str = «anyone can guess it.» example_str = article + example_str + » is so simple, so » + comment_str; // example_str = «The password is so simple, so anyone can guess it.»

Удаление фрагмента

Функция erase() удаляет указанный фрагмент строки (если это возможно). Первым параметром указывается начальный символ (с него начнется удаление), вторым — количество символов. Символы в строке нумеруются, начиная с 0.

example_str = «The star is so distant»; example_str.erase(3, 6); // example_str = «Theis so distant» // будет удалено слово star вместе с обоими пробелами

example_str = «The star is so distant»; example_str.erase(3, 80); // example_str = «The» // будет удалено столько символов, сколько возможно

Вставка фрагмента

С помощьью функции insert() можно добавить заданный фрагмент в любое место строки. Первым параметром функции является номер начальной позиции для фрагмента (нумерация начинается с 0), вторым — фрагмент. Функция изменяет исходную строку.

example_str = «123456»; example_str.insert(3, «+»); // теперь example_str = «123+456»

Копирование фрагмента

Функция substr() возвращает фрагмент строки (который тоже является строкой). Первым параметром указывается номер начального символа, вторым — количество. Символы нумеруются, начиная с 0. Функция не оказывает влияния на исходную строку.

example_str = «Do bats eat cats?»; new_str = example_str.substr(3, 5); // new_str = «bats » // будет скопировано слово «bats» вместе с последуюшим пробелом

example_str = «Do bats eat cats?»; new_str = example_str.substr(12, 100); // new_str = «cats?» // в строке нет 100 символов, поэтому будет скопировано сколько есть

Поиск фрагмента

С помощью функции find() можно определить, встречается ли данный фрагмент в строке. Функция возвращает специальное значение string::npos, если фрагмент не найден или номер первого (начиная слева) места, откуда начинается подобный фрагмент

example_str = «comandante@cia.dark.org»; x = example_str.find(«z»); // в этом примере x равно string::npos, // так как в строке нет ни одной буквы z

example_str = «comandante@cia.dark.org»; x = example_str.find(«a»); // в этом примере x равно 3, // символов «а» в строке несколько, но find // вернет номер только для первого слева

example_str = «comandante@cia.dark.org»; if (example_str.find(«te») != string::npos) < // команды этого блока выполнятся, так как // в строке есть фрагмент "te" >

Преобразование к числу

1. Ввод/вывод в stringstream. Требуется создать специальный поток ввода/вывода, который будет вводить или выводить данные в некоторый буффер в памяти. При этом операции будут сходны со стандартным вводом/выводом.

#include stringstream container; // создали специальный поток ввода/вывода, // который «работает» в некоторой области памяти string data = «918»; int x; container.clear(); // на случай, если в container что-то лежало, чтобы // случайно не попало в результат преобразования container > x; // достаем из потока это же число в виде int

2. Функция sscanf() (scan from string as fromatted). Данная функция также из обычного C (не C++) поэтому «умеет» работать только с символьными массивами. В грубом приближении у функции 3 параметра: символьный массив, строка формата и переменная (или переменные), куда следует поместить результаты преобразования.

#include string some_value = 825; x = sscanf(some_value.data(), «%d», &x); // в x записано число типа int, извлеченное из строки // функция data() позволяет получить символьный массив // в формате языка C (не C++), с таким же содержанием, // что и строка

Преобразование числа к строке

1. Ввод/вывод в stringstream. Требуется создать специальный поток ввода/вывода, который будет вводить или выводить данные в некоторый буффер в памяти. При этом операции будут сходны со стандартным вводом/выводом.

#include #include #include using namespace std; stringstream container; // создали специальный поток ввода/вывода, // который «работает» в некоторой области памяти string data; int x = 16; container.clear(); // объясняем потоку, что в нем нет данных // чтоб не получить при чтении то, что не клали туда сами container > data; // достаем из потока это же число в виде строки

2. sprintf() (print formatted to string). Эта функция также является функцией из стандартного C, и тоже работает только с массивами из char). Параметры (вкратце): символьный массив, куда будет выведен результат, строка формата, данные.

Подробнее про строку формата см. например, здесь.

#include #include #include int x; string s; char z[100]; x = 92; sprintf(z, «%d», x); s = z;

Строка как массив символов

Строку можно рассматривать как массив символов и применять к ней методы работы, как с массивом.

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

Пишу ПО, создаю сайты, делаю курсовые работы, за деньги
C#, .NET, MS SQL, AngularJS, HTML, jQuery

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пробелы в строке nvarchar(500), как избежать? godlsd БД в Delphi 4 21.08.2010 21:55
Передвинуть пробелы в строке Nastushka Assembler — Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 24.05.2010 19:21
удалить в строке лишние пробелы euhenia Помощь студентам 4 02.12.2009 21:55
Пробелы Progs1024 Помощь студентам 1 25.10.2009 21:06
Процедура или функция, удаляющая окаймляющие пробелы в строке (Delphi) Аццкий прогер Помощь студентам 2 03.03.2009 04:12

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

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