22.5 — std::string 赋值和交换

字符串赋值

给字符串赋值最简单的方法是使用重载的 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,因此可以“链式调用”。
  • 请注意,没有接受单个 char 的 assign() 函数。

示例代码

std::string sString;

// Assign a string value
sString = std::string("One");
std::cout << sString << '\n';

const std::string sTwo("Two");
sString.assign(sTwo);
std::cout << sString << '\n';

// Assign a C-style string
sString = "Three";
std::cout << sString << '\n';

sString.assign("Four");
std::cout << sString << '\n';

// Assign a char
sString = '5';
std::cout << sString << '\n';

// Chain assignment
std::string sOther;
sString = sOther = "Six";
std::cout << sString << ' ' << sOther << '\n';

输出

One
Two
Three
Four
5
Six Six

assign() 成员函数还有其他几种形式

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

  • 赋值 str 的子字符串,从 index 开始,长度为 len
  • 如果 index 超出范围,则抛出 out_of_range 异常
  • 返回 *this,因此可以被“链式调用”。

示例代码

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

sDest.assign(sSource, 2, 4); // assign a substring of source from index 2 of length 4
std::cout << sDest << '\n';

输出

cdef

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

  • 从 C 风格数组 chars 中赋值 len 个字符
  • 如果结果超过最大字符数,则抛出 length_error 异常
  • 返回 *this,因此可以被“链式调用”。

示例代码

std::string sDest;

sDest.assign("abcdefg", 4);
std::cout << sDest << '\n';

输出

abcd

此函数具有潜在危险性,不建议使用。

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

  • 赋值 len 个字符 c
  • 如果结果超过最大字符数,则抛出 length_error 异常
  • 返回 *this,因此可以被“链式调用”。

示例代码

std::string sDest;

sDest.assign(4, 'g');
std::cout << sDest << '\n';

输出

gggg

交换

如果您有两个字符串并希望交换它们的值,可以使用两个名为 swap() 的函数。

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

  • 这两个函数都交换两个字符串的值。成员函数交换 *this 和 str,全局函数交换 str1 和 str2。
  • 这些函数效率很高,应该用于执行字符串交换,而不是赋值。

示例代码

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

std::cout << sStr1 << ' ' << sStr2 << '\n';
swap(sStr1, sStr2);
std::cout << sStr1 << ' ' << sStr2 << '\n';
sStr1.swap(sStr2);
std::cout << sStr1 << ' ' << sStr2 << '\n';

输出

red blue
blue red
red blue
guest
您的电子邮箱地址将不会被显示
发现错误?请在上方留言!
与勘误相关的评论在处理后将被删除,以帮助减少混乱。感谢您帮助使网站对每个人都更好!
来自 https://gravatar.com/ 的头像与您提供的电子邮箱地址相关联。
有回复时通知我:  
31 条评论
最新
最早 最多投票
内联反馈
查看所有评论