22.5 – Присваивание и обмен значениями для объектов std::string

Добавлено 2 октября 2021 в 22:27

Присваивание строки

Самый простой способ присвоить значение строке – использовать перегруженную функцию operator=. Существует также функция-член assign(), которая дублирует некоторые из этих возможностей.

string& string::operator= (const string& str)
string& string::assign (const string& str)
string& string::operator= (const char* str)
string& string::assign (const char* str)
string& string::operator= (char c)

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

Обратите внимание, что нет функции assign(), которая принимает один символ char.

Пример кода:

string sString;

// Присваиваем строковое значение
sString = string("One");
cout << sString << endl;

const string sTwo("Two");
sString.assign(sTwo);
cout << sString << endl;

// Присваиваем строку в стиле C
sString = "Three";
cout << sString << endl;

sString.assign("Four");
cout << sString << endl;

// Присваиваем символ char
sString = '5';
cout << sString << endl;

// Цепочка присваиваний
string sOther;
sString = sOther = "Six";
cout << sString << " " << sOther << endl;

Вывод:

One
Two
Three
Four
5
Six Six

Функция-член assign() также имеет несколько других вариантов:

string& string::assign (const string& str, size_type index, size_type len)

Присваивает подстроку str, начиная с позиции index, и длиной len.

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

Пример кода:

const string sSource("abcdefg");
string sDest;

// присваиваем подстроку из источника, начиная с индекса 2, длиной 4
sDest.assign(sSource, 2, 4); 
cout << sDest << endl;

Вывод:

cdef

string& string::assign (const char* chars, size_type len)

Присваивает len символов из массива символов в стиле C.

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

Пример кода:

string sDest;

sDest.assign("abcdefg", 4);
cout << sDest << endl;

Вывод:

abcd

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

string& string::assign (size_type len, char c)

Присваивает len вхождений символа c.

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

Пример кода:

string sDest;

sDest.assign(4, 'g');
cout << sDest << endl;

Вывод:

gggg

Обмен значениями

Если у вас есть две строки, и вы хотите поменять их значения местами, вы можете использовать две функции с именем swap().

void string::swap (string &str)
void swap (string &str1, string &str2)

Обе функции меняют местами значения двух строк. Функция-член меняет местами значения *this и str, глобальная функция меняет местами значения str1 и str2.

Эти функции эффективны и должны использоваться вместо присваиваний для выполнения обмена значений строк.

Пример кода:

string sStr1("red");
string sStr2("blue");

cout << sStr1 << " " << sStr2 << endl;
swap(sStr1, sStr2);
cout << sStr1 << " " << sStr2 << endl;
sStr1.swap(sStr2);
cout << sStr1 << " " << sStr2 << endl;

Вывод:

red blue
blue red
red blue

Теги

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

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

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