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