22.7 – Вставка данных в объекты std::string

Добавлено 3 октября 2021 в 18:43

Вставить символы в существующую строку можно с помощью функции 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.

Пример кода:

string sString("aaaa");
cout << sString << endl;

sString.insert(2, string("bbbb"));
cout << sString << endl;

sString.insert(4, "cccc");
cout << sString << endl;

Вывод:

aaaa
aabbbbaa
aabbccccbbaa

А вот безумная версия 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, если результат превышает максимальное количество символов.

Пример кода:

string sString("aaaa");

const string sInsert("01234567");
// вставляем подстроку sInsert с индексами [3,7) в sString в место с индексом 2
sString.insert(2, sInsert, 3, 4);
cout << sString << endl;

Вывод:

aa3456aa

Также есть вариант insert(), который вставляет начальную часть строки в стиле C:

string& string::insert(size_type index, const char* str, size_type len)

Вставляет len символов строки str в строку в место с индексом index.

  • Возвращает *this, чтобы ее можно было вставить в «цепочку».
  • Выдает исключение out_of_range, если значение индекса недопустимо.
  • Выдает исключение length_error, если результат превышает максимальное количество символов.
  • Игнорирует специальные символы (например, ").

Пример кода:

string sString("aaaa");

sString.insert(2, "bcdef", 3);
cout << sString << endl;

Вывод:

aabcdaa

Также есть вариант insert(), который вставляет один и тот же символ несколько раз:

string& string::insert(size_type index, size_type num, char c)

Вставляет num экземпляров символа c в строку в место, определенное значением index.

  • Возвращает *this, чтобы ее можно было вставить в «цепочку».
  • Выдает исключение out_of_range, если значение индекса недопустимо.
  • Выдает исключение length_error, если результат превышает максимальное количество символов.

Пример кода:

string sString("aaaa");

sString.insert(2, 4, 'c');
cout << sString << endl;

Вывод:

aaccccaa

И, наконец, функция 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)

  • Первая функция вставляет num экземпляров символа c перед итератором it.
  • Второй вариант вставляет один символ c перед итератором it и возвращает итератор на позицию вставленного символа.
  • Третий вариант вставляет все символы между [begin, end) перед итератором it.
  • Все три функции выдают исключение length_error, если результат превышает максимальное количество символов.

Теги

C++ / CppLearnCppstd::stringstd::wstringДля начинающихОбучениеПрограммированиеСтрокаСтрока в стиле C

На сайте работает сервис комментирования DISQUS, который позволяет вам оставлять комментарии на множестве сайтов, имея лишь один аккаунт на Disqus.com.

В случае комментирования в качестве гостя (без регистрации на disqus.com) для публикации комментария требуется время на премодерацию.