22.6 – Добавление данных к объектам std::string

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

Добавить строку в конец существующей строки легко, для этого необходимо воспользоваться функцией operator+=, append() или push_back().

string& string::operator+= (const string& str)
string& string::append (const string& str)

Эти функции добавляют к строке символы str.

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

Пример кода:

string sString("one");

sString += string(" two");

string sThree(" three");
sString.append(sThree);

cout << sString << endl;

Вывод:

one two three

Также есть вариант append(), который может добавлять подстроку:

string& string::append (const string& str, size_type index, size_type num)

Эта функция добавляет к строке num символов из строки str, начиная с index.

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

Пример кода:

string sString("one ");

const string sTemp("twothreefour");

// добавляем подстроку строки sTemp, начиная с индекса 3, длиной 5
sString.append(sTemp, 3, 5);
cout << sString << endl;

Вывод:

one three

operator+= и append() также имеют версии, которые работают со строками в стиле C.

string& string::operator+= (const char* str)
string& string::append (const char* str)

Эти функции добавляют к строке символы str.

  • Обе функции возвращают *this, поэтому их можно объединить в «цепочку».
  • Обе функции вызывают исключение length_error, если результат превышает максимальное количество символов.
  • str не должна быть равна nullptr.

Пример кода:

string sString("one");

sString += " two";
sString.append(" three");
cout << sString << endl;

Вывод:

one two three

Есть еще один дополнительный вариант append(), который работает со строками в стиле C:

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

Добавляет в строку первые len символов строки str.

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

Пример кода:

string sString("one ");

sString.append("threefour", 5);
cout << sString << endl;

Вывод:

one three

Эта функция опасна, и ее использование не рекомендуется.

Также есть набор функций, которые добавляют символы. Обратите внимание, что имя неоператорной функции для добавления символа – push_back(), а не append()!

string& string::operator+= (char c)
void string::push_back (char c)

Эти функции добавляют к строке символ c.

  • operator+= возвращает *this, чтобы его можно было вставить в «цепочку».
  • Обе функции вызывают исключение length_error, если результат превышает максимальное количество символов.

Пример кода:

string sString("one");

sString += ' ';
sString.push_back('2');
cout << sString << endl;

Вывод:

one 2

Вам может быть интересно, почему имя этой функции – push_back(), а не append(). Это следует соглашению об именах, используемому для стеков, где push_back() – это функция, которая добавляет один элемент в конец стека. Если вы представляете строку, как стек символов, то для добавления одного символа в ее конец имеет смысл использовать push_back(). Однако, на мой взгляд, отсутствие функции append() выбивается из последовательности!

Оказывается, есть функция append() для символов, которая выглядит так:

string& string::append (size_type num, char c)

Добавляет количество вхождений символа c в строку

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

Пример кода:

string sString("aaa");

sString.append(4, 'b');
cout << sString << endl;

Вывод:

aaabbbb

Есть еще один, последний, вариант append(), который вы не поймете, если не знаете, что такое итераторы. Если вы не знакомы с итераторами, можете игнорировать эту функцию.

string& string::append (InputIterator start, InputIterator end)

Добавляет все символы из диапазона [start, end) (включая начало, но не включая конец)

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

Теги

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

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

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