Вставлять символы/строки в std::string можно с помощью функции insert().
string& string::insert(size_type index, const string& str)
string& string::insert(size_type index, const char* str)
Обе функции вставляют символы/строки, начиная с определенного index
std::string.
Возвращают скрытый указатель *this, что позволяет «связывать» объекты.
Генерируют исключение out_of_range, если index
некорректен.
Генерируют исключение length_error, если результат превышает максимально допустимое количество символов.
Во второй версии функции insert() str
не должен быть NULL
.
Например:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#include <iostream> #include <string> int main() { std::string sString("bbb"); std::cout << sString << std::endl; sString.insert(2, std::string("mmm")); std::cout << sString << std::endl; sString.insert(5, "aaa"); std::cout << sString << std::endl; } |
Результат:
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, если результат превышает максимально допустимое количество символов.
Например:
1 2 3 4 5 6 7 8 9 10 11 |
#include <iostream> #include <string> int main() { std::string sString("bbb"); const std::string sInsert("012345"); sString.insert(1, sInsert, 2, 4); // вставляем подстроку sInsert длиной 4, начиная с символа под индексом 2, в строку sString, начиная с индекса 1 std::cout << sString << std::endl; } |
Результат:
b2345bb
А вот версия функции 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, если результат превышает максимально допустимое количество символов.
Игнорирует специальные символы (такие как "
).
Например:
1 2 3 4 5 6 7 8 9 10 |
#include <iostream> #include <string> int main() { std::string sString("bbb"); sString.insert(2, "acdef", 4); std::cout << sString << std::endl; } |
Результат:
bbacdeb
А вот версия функции 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, если результат превышает максимально допустимое количество символов.
Например:
1 2 3 4 5 6 7 8 9 10 |
#include <iostream> #include <string> int main() { std::string sString("bbb"); sString.insert(2, 3, 'a'); std::cout << sString << std::endl; } |
Результат:
bbaaab
И, наконец, функция 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, если результат превышает максимально допустимое количество символов.
Самая сухая глава из всех, к сожалению, которая заменяется беглым взглядом в документацию
Пример функций
Результат:
eeeYYYYttttrrrruuuu
Y
H
eeeHYYYYttttrrrruuuu
privet
prHYYYivet