22.7 – Вставка данных в объекты std::string
Вставить символы в существующую строку можно с помощью функции insert()
.
string& string::insert (size_type index, const string& str)
string& string::insert (size_type index, const char* 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)
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
, если результат превышает максимальное количество символов.