C++基础教程面向对象(学习笔记(98))

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)
//这些函数将各种类型的值分配给字符串。
//这些函数返回*这样它们可以被“链接”。
//请注意,没有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;
 
// 分配一个字符
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)
//从index开始分配str的子字符串,长度为len
//如果索引超出范围,则抛出out_of_range异常
//返回*这样就可以“链接”了。
//示例代码:


const string sSource("abcdefg");
string sDest;
 
sDest.assign(sSource, 2, 4); // 从长度为4的索引2中分配源的子字符串
cout << sDest << endl;
输出:

cdef


string&string :: assign(const char * chars,size_type len)
//从C风格的数组字符中分配len个字符
//如果结果超过最大字符数,则抛出length_error异常
//返回*这样就可以“链接”了。
//示例代码:

string sDest;
 
sDest.assign("abcdefg", 4);
cout << sDest << endl;
//输出:

abcd


//此功能具有潜在危险,不建议使用。

string&string :: assign(size_type len,char c)
//分配字符c的len次出现
//如果结果超过最大字符数,则抛出length_error异常
//返回*这样就可以“链接”了。
//示例代码:


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

猜你喜欢

转载自blog.csdn.net/qq_41879485/article/details/84872099