Добавить символ в конец строки в C++
В этой быстрой статье мы рассмотрим различные методы добавления символа в конец строки в C++.
1. Использование push_back() функция
Рекомендуемый подход заключается в использовании стандартного push_back() функция, которая перегружена для символов и добавляет символ в конец строки.
2. Использование += оператор
Мы также можем использовать string::operator+= , который перегружен для символов и внутренних вызовов push_back() функция.
3. Использование append() функция
Другим приемлемым подходом является использование append() функция для добавления одной копии символа в конец строки, как показано ниже:
4. Использование std::stringstream функция
Другой хорошей альтернативой является использование строкового потока для преобразования между строками и другими числовыми типами.
5. Использование insert() функция
Наконец, мы также можем использовать insert() Функция для вставки одной копии символа в указанную позицию в строке.
Это все о добавлении символа в конец строки в C++.
Оценить этот пост
Средний рейтинг 4.54 /5. Подсчет голосов: 80
Голосов пока нет! Будьте первым, кто оценит этот пост.
Сожалеем, что этот пост не оказался для вас полезным!
Расскажите, как мы можем улучшить этот пост?
Спасибо за чтение.
Пожалуйста, используйте наш онлайн-компилятор размещать код в комментариях, используя C, C++, Java, Python, JavaScript, C#, PHP и многие другие популярные языки программирования.
Как мы? Порекомендуйте нас своим друзьям и помогите нам расти. Удачного кодирования
Как добавить символ в строку
Если надо добавить в конец строки другую строку, применяется метод append() , в который передается добавляемая строка:
Вставка строки
Для вставки одной строки в другую применяется функция insert() . Она имеет несколько различных версий. Самая простая версия принимет индекс вставки и вставляемую строку:
В данном случае в строку text начиная с 7-го индекса вставляем строку str. В итоге переменная text будет равна «insert a string into a text».
Также можно вставлять строковый литерал:
Можно вставлять часть подстроки:
Здесь в text вставляем из переменной langs 3 символа с 5-го индекса, то есть подстроку » C,».
Среди других версий функции insert() также следует отметить версию, которая позволяет вставить определенный символ определенное число раз:
В данном случае вставляем в строку text символ * 5 раз начиная с 8 индекса.
Замена подстроки
Для замены в строке некоторой части применяется функция replace() . Эта функция также имеет много версий, поэтому рассмотрим самые распространенные.
Самая простая версия принимает три параметра:
Первый параметр — представляет индекс, с которого надо заменять подстроку. Второй параметр — количество заменяемых символов. Третий параметр — на какую строку надо заменить. Пример:
Здесь в строке text заменяем 4 символа с 6-го индекса на строку «C++». Таким образом, из строки «Lang: Java» мы получим строку «Lang: C++».
В предыдущем примере символы заменялись на строковый литерал. Но также можно заменять на объект string:
Нередко стоит задача заменить какой-то определенную подстроку, индекс которой может быть не известен. В этом случае мы можем воспользоваться поиском в строке, чтобы найти индекс подстроки и ее размер. Например, возьмем текст «Hello, Tom!» и заменим подстроку «Tom» на «Bob»:
Здесь находим позицию первого символа подстроки «Tom» в тексте и сохраняем ее в переменную start. Символ, следующий за последним символом подстроки «Tom», находится путем поиска символа разделителя из строки separators с помощью функции find_first_of() . Далее используем найденные позиции индекса в replace() .
Однако в тексте может быть множество вхождений определенной подстроки (в нашем случае строки «Tom»), и может встать задача заменить все эти вхождения. Для этого мы можем использовать циклы:
Здесь сначала находим индекс первого вхождения подстроки, которую надо заменить, и сохраняем этот индекс в переменную start. В цикле заменяем последовательно все вхождения подстроки. После каждой замены находим индекс следующего вхождения, сохраняем его в переменную start и повторяем цикл. Когда больше нет вхождений подстроки в текст, start будет содержать значение std::string::npos , что завершает цикл.
Из других версий функции replace() можно выделить функцию, которая заменяет подстроку определенным символом, который повторяется определенное количество раз:
Здесь заменяет в строке text 6 символов начиная с 9-го индекса на 5 символов *.
Удаление символов
Если надо не просто заменить символы, а удалить их из текста, также можно использовать функцию replace() — в этом случае удаляемые символы фактически заменяются на пустую строку:
Однако С++ также предоставляет для удаления символов специальную функцию — erase() . В качестве параметров она принимает начальный индекс удаления и количество удаляемых символов:
Аналогично можно удалить все вхождения определенной подстроки:
Функция erase() имеет ряд дополнительных версий. Так, можно оставить определенное количество символов с начала строки, а остальные удалить:
Если в функцию не передается никаких параметров, то она удаляет все символы, и в результате получаем пустую строку:
Стоит отметить, что в стандарт С++20 была добавлена функция std::erase() , которая удаляет все вхождения определенного символа в строке:
22.7 – Вставка данных в объекты std::string
Вставить символы в существующую строку можно с помощью функции insert() .
string& string::insert (size_type index, const string& str)
string& string::insert (size_type index, const char* str)
Эти функции вставляют символы str в строку в место, определенное значением index .
- Обе функции возвращают *this , чтобы их можно было объединить в «цепочку».
- Обе функции выбрасывают исключение out_of_range , если значение индекса недопустимо.
- Обе функции вызывают исключение length_error , если результат превышает максимальное количество символов.
- В версии со строкой в стиле C значение str не должно быть равно nullptr .
А вот безумная версия insert() , которая позволяет вставлять подстроку в строку в место по произвольному индексу:
string& string::insert (size_type index, const string& str, size_type startindex, size_type num)
Эта функция вставляет num символов str , начиная с startindex , в строку в место, определенное значеним index .
- Возвращает *this , чтобы ее можно было вставить в «цепочку».
- Выбрасывает исключение out_of_range , если index или startindex выходит за границы строки.
- Выбрасывает исключение length_error , если результат превышает максимальное количество символов.
Также есть вариант insert() , который вставляет начальную часть строки в стиле C:
string& string::insert(size_type index, const char* str, size_type len)
Вставляет len символов строки str в строку в место с индексом index .
- Возвращает *this , чтобы ее можно было вставить в «цепочку».
- Выдает исключение out_of_range , если значение индекса недопустимо.
- Выдает исключение length_error , если результат превышает максимальное количество символов.
- Игнорирует специальные символы (например, " ).
Также есть вариант insert() , который вставляет один и тот же символ несколько раз:
string& string::insert(size_type index, size_type num, char c)
Вставляет num экземпляров символа c в строку в место, определенное значением index .
- Возвращает *this , чтобы ее можно было вставить в «цепочку».
- Выдает исключение out_of_range , если значение индекса недопустимо.
- Выдает исключение length_error , если результат превышает максимальное количество символов.
И, наконец, функция insert() также имеет три разные версии, в которых используются итераторы:
Урок №206. Вставка символов и строк в std::string
Вставлять символы/строки в std::string можно с помощью функции insert().
string& string::insert(size_type index, const string& str)
string& string::insert(size_type index, const char* str)
Обе функции вставляют символы/строки, начиная с определенного index std::string.
Генерируют исключение length_error, если результат превышает максимально допустимое количество символов.
Во второй версии функции insert() str не должен быть NULL .
bbb
bbmmmb
bbmmmaaab
А вот версия функции insert(), которая позволяет вставить с определенного index std::string подстроку.
string& string::insert(size_type index, const string& str, size_type startindex, size_type num)
Эта функция вставляет с определенного index std::string указанное количество символов ( num ) строки str , начиная со startindex -а.
Возвращает скрытый указатель *this, что позволяет «связывать» объекты.
Генерирует исключение out_of_range, если index или startindex некорректны.
Генерирует исключение length_error, если результат превышает максимально допустимое количество символов.
А вот версия функции insert(), с помощью которой в std::string можно вставить часть строки C-style.
string& string::insert(size_type index, const char* str, size_type len)
Эта функция вставляет с определенного index std::string указанное количество символов ( len ) строки C-style str .
Возвращает скрытый указатель *this, что позволяет «связывать» объекты.
Генерирует исключение out_of_range, если index некорректен.
Генерирует исключение length_error, если результат превышает максимально допустимое количество символов.
Игнорирует специальные символы (такие как » ).
А вот версия функции insert(), которая вставляет в std::string один и тот же символ несколько раз.
string& string::insert(size_type index, size_type num, char c)
Эта функция вставляет с определенного index std::string указанное количество вхождений ( num ) символа c .
Возвращает скрытый указатель *this, что позволяет «связывать» объекты.
Генерирует исключение out_of_range, если index некорректен.
Генерирует исключение length_error, если результат превышает максимально допустимое количество символов.
И, наконец, функция insert() имеет три разные версии, которые работают с итераторами.
void insert(iterator it, size_type num, char c)
iterator string::insert(iterator it, char c)
void string::insert(iterator it, InputIterator begin, InputIterator end)
Первая версия функции вставляет в std::string указанное количество вхождений ( num ) символа c перед итератором it .
Вторая версия функции вставляет в std::string одиночный символ c перед итератором it и возвращает итератор в позицию вставленного символа.
Третья версия функции вставляет в std::string все символы диапазона (begin, end) перед итератором it .
Все функции генерируют исключение length_error, если результат превышает максимально допустимое количество символов.