На цьому уроці ми розглянемо операції присвоювання інших значень для std::string і перестановку значень двох рядків.
Присвоювання для std::string інших значень
Найпростіший спосіб присвоїти std::string інше значення — використати перевантажений оператор присвоювання =. Або, в якості альтернативи, метод 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)
Ці функції дозволяють присвоювати std::string значення різних типів.
Вони повертають прихований вказівник *this, що дозволяє «зв’язувати» об’єкти.
Зверніть увагу, функції assign(), яка приймала б один символ, немає.
Наприклад:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
#include <iostream> #include <string> int main() { using namespace std; string sString; // Присвоюємо std::string інший рядок sString = string("One"); cout << sString << endl; const string sTwo("Two"); sString.assign(sTwo); cout << sString << endl; // Присвоюємо std::string рядок C-style sString = "Three"; cout << sString << endl; sString.assign("Four"); cout << sString << endl; // Присвоюємо std::string значення типу char sString = '5'; cout << sString << endl; // Зв'язуємо об'єкти string sOther; sString = sOther = "Six"; cout << sString << " " << sOther << endl; return 0; } |
Результат:
One
Two
Three
Four
5
Six Six
Метод assign() також має кілька інших різновидів.
string& string::assign(const string& str, size_type index, size_type len)
Ця функція присвоює std::string підрядок str
довжиною len
, починаючи з index
.
Генерує виняток out_of_range, якщо index
недопустимий.
Повертає прихований вказівник *this, що дозволяє «зв’язувати» об’єкти.
Наприклад:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#include <iostream> #include <string> int main() { const std::string sSomething("abcdefgh"); std::string sDest; sDest.assign(sSomething, 3, 5); // присвоюємо sDest підрядок sSomething довжиною 5, починаючи з індексу 3 std::cout << sDest << std::endl; return 0; } |
Результат:
defgh
string& string::assign(const char* chars, size_type len)
Ця функція присвоює std::string рядок C-style довжиною len
.
Генерує виняток length_error, якщо результат перевищує максимальну кількість символів.
Повертає прихований вказівник *this, що дозволяє «зв’язувати» об’єкти.
Наприклад:
1 2 3 4 5 6 7 8 9 10 11 12 |
#include <iostream> #include <string> int main() { std::string sDest; sDest.assign("abcdefgh", 5); std::cout << sDest << std::endl; return 0; } |
Результат:
abcde
Ця функція потенційно небезпечна, тому використовувати її не рекомендується.
string& string::assign(size_type len, char c)
Ця функція присвоює std::string певну кількість входжень символа c
. Кількість входжень вказується в len
.
Генерує виняток length_error, якщо результат перевищує максимальну кількість символів.
Повертає прихований вказівник *this, що дозволяє «зв’язувати» об’єкти.
Наприклад:
1 2 3 4 5 6 7 8 9 10 11 12 |
#include <iostream> #include <string> int main() { std::string sDest; sDest.assign(5, 'h'); std::cout << sDest << std::endl; return 0; } |
Результат:
Перестановка значень двох рядків
Якщо у вас є два рядки, значення яких ви хочете поміняти місцями, використовуйте функцію swap().
void string::swap(string &str)
void swap(string &str1, string &str2)
Обидві функції міняють місцями значення двох рядків. Перший варіант функції swap() міняє місцями значення *this і str
, а другий — str1
і str2
.
Використовуйте ці функції замість операції присвоювання, якщо потрібно поміняти місцями значення двох рядків.
Наприклад:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#include <iostream> #include <string> using namespace std; int main() { string sStr1("green"); string sStr2("white"); cout << sStr1 << " " << sStr2 << endl; swap(sStr1, sStr2); cout << sStr1 << " " << sStr2 << endl; sStr1.swap(sStr2); cout << sStr1 << " " << sStr2 << endl; return 0; } |
Результат:
green white
white green
green white
На наступному уроці ми розглянемо додавання значень до std::string.