При написании программ на языке C++ часто приходится иметь дело с текстом. Нужно склеить два слова, найти нужную букву или заменить часть фразы. Для этого в языке есть специальные встроенные инструменты.
Давайте разберем самые основные и полезные функции. Они помогут вам обращаться с текстом так же легко, как с числами.
Что такое строка?
Для простоты будем считать, что строка — это просто набор символов, заключенный в кавычки: "Привет". В C++ чаще всего используют тип string. Чтобы он работал, в самом начале программы нужно добавить: #include <string>.
1. Склеивание (Сложение)
Самое понятное действие. Две строки можно просто сложить, поставив между ними плюс.
Пример:
Name = "Анна" + " " + "Иванова".
Когда применять: Когда нужно соединить слова, добавить пробел или знак препинания между частями текста.
Но! Есть одна неприятность. Показанный выше пример приведёт к ошибке компиляции, потому что в C++ есть старая добрая работа со строками из языка Си. Когда вы пишете "Анна" с кавычками, это не строка типа string. Это массив отдельных символов (си-строка, или const char[]).
Язык C++ не умеет складывать два таких массива через плюс. Отсюда и ошибка компиляции: «неверные типы операндов». Как это исправить, см. в примере:
2. Длина строки
Функция, которая считает количество символов в строке. Пробелы и знаки препинания тоже считаются.
Как использовать: К переменной с текстом нужно добавить точку и написать length() (современные средства разработки при написании точки после переменной предложат возможные варианты).
Пример:
Name.length();
Если это переменная из предыдущего примера, то функция вернёт число 12.
Когда применять: Перед тем как пройтись по строке символ за символом или когда нужно проверить, ввел ли пользователь что-то, а не оставил поле пустым.
3. Пустая строка
Бывает нужно просто узнать: есть внутри что-то или нет? Для этого служит функция empty().
Она возвращает ответ «да» или «нет»: пусто или не пусто.
Пример:
Если строка пустая, то функция empty() вернет «истину» (пусто), и программа, например, может попросить ввести данные заново. Однако в консольных приложениях при использовании cin мы не сможем получить пустую строку, потому что при нажатии ENTER будет просто выполняться переход на новую строку, а программа продолжит ожидать ввода текста, но не перейдёт к выполнению следующей строки кода.
Когда применять: Для проверки ввода (в некоторых случаях). Нельзя искать букву в пустом месте или склеивать то, чего нет.
4. Добавление в конец
Бывает удобнее не склеивать через плюс, а прилепить новый кусок текста в конец уже существующей строки. Это делается функцией append().
Пример:
Было "Сок". Пишем append(" яблочный"). Получается "Сок яблочный".
Когда применять: Если вы собираете длинный текст по частям, например, формируете письмо или отчет.
Пример кода можно увидеть на первом рисунке выше.
5. Вставка в середину
Иногда нужно добавить символ или слово не в конец, а в указанное место. Здесь поможет insert(). Нужно указать номер позиции (отсчет начинается с нуля) и то, что вы хотите вставить.
Пример:
Есть слово "Бревно". Нам нужно получить "Бревнышко".
Мы знаем, что буква “о” стоит на четвертой позиции (опять же, считаем с нуля: Б-0, р-1, е-2, в-3, н-4, о-5). Значит, вставить кусочек "ышк" нужно на позицию 5. Этот кусок вставится в указанную позицию, а остальные буквы (в нашем случае только буква “о”) будут сдвинуты вправо.
Когда применять: Редко, но полезно при обработке текста по правилам, например, в редакторах или играх.
6. Поиск внутри строки
Одна из самых нужных функций. Она называется find(). Вы ищете маленький кусочек внутри большого текста. Функция возвращает номер позиции, с которой этот кусочек начинается.
Пример:
Ищем букву "о" в слове "молоко". Функция найдет первую букву «о» и вернет позицию 1 (напомню, счет идет с нуля: м-0, о-1). В коде может выглядеть так:
Name.find('о');
Когда применять: Когда нужно проверить, есть ли в адресе электронной почты значок «собачка» или есть ли в ссылке нужное слово.
Важное замечание: Если ничего не найдено, функция возвращает особое значение npos. Это как ответ «ничего не найдено». Всегда проверяйте результат поиска.
7. Замена части строки
Функция replace() делает три дела: находит кусок текста по номеру начальной позиции, отсчитывает нужную длину и заменяет этот кусок на ваш текст.
Пример:
Строка "Иванов Иван Иванович". Хотим заменить "Иван" на "Пётр", и получить "Иванов Пётр Иванович".
Обратите внимание, что для поиска мы задали строку "Иван " с пробелом в конце. Если пробел убрать, то будет найдено первое вхождение подстроки, то есть результат будет не такой, как мы хотели, а "Петров Иван Иванович".
Когда применять: Когда нужно исправить опечатки или заменить одно слово на другое в готовом предложении.
8. Очистка
Функция clear() просто удаляет все символы из строки. Строка становится пустой.
Пример: Корзина покупок была заполнена, пользователь нажал «Отмена» — вызываем clear() и начинаем заново.
Когда применять: При сбросе формы или перезапуске процесса.
Какую функцию выбрать для простых задач?
- Склеить два слова — просто используйте плюс (но с учётом типов данных).
- Проверить, есть ли в строке буква или слово — find().
- Узнать длину — length().
- Очистить все — clear().
Этих восьми функций достаточно, чтобы решить 90% повседневных задач с текстом в C++. Они работают быстро и понятны даже новичкам. Попробуйте каждую в простой программе, и вы быстро запомните, как ими пользоваться.
P.S. Конечно, есть возможность работать со строками без использования #include <string>, но это уже другая история. К тому же зачем мучаться со старыми способами, если есть более современные, которые здесь и рассмотрены. Впрочем, есть и ещё более современные. Но это тоже другая история…
На этом всё. Подписывайтесь на канал, чтобы ничего не пропустить.