接下来我们继续string使用的学习
目录
Append
append是在string对象后插入字符串的函数,与之类似的为push_back函数 ,也可以通过重载后的+=来实现
// string的插入
void test_string5() {
string s1("hello");
string s2;
s2.push_back('w');
cout << s2 << endl;
s2.append("orld");
cout << s2 << endl;
s1.append(s2); // 可以插入整个对象
cout << s1 << endl;
s1 = "my";
s1 += s2; // 加等比较好用
cout << s1 << endl;
}
也可以用 + 来实现,但是+具有局限性,并且存在两次拷贝
Insert
与append类似也为插入函数,不过与append尾插不同的是,insert函数为头插函数
上图为insert重载,有多种用法,下面我们距离插入单个字符的例子
// 头插语法
对象名.insert(开始的位置, 插入字符数量, 插入字符);
string str("hello");
str.insert(0,1,'a');
Erase
str.erase(2); // 删除从第二个字符开始,直至最后一个
Replace
replace就是替代某一块区域具体还是要通过文档来写,ps:insert / erase / replace 经常涉及数据的挪动,导致效率过低,所以我们一般不适用
Swap
有时候我们可能需要将s2替代为s1,联系学过的内容我们可以通过重载的“=”或者是直接用assign直接覆盖,但是string里内置有swap函数,可以更好的提高效率吧
实质上就是对s2,s3的三个成员变量部分进行交换,在打印中我们也能看出来
其中的c_str()为查找到string对象中的数组指针的地址
Find与相关Find
find顾名思义就是寻找,在string中就是寻找某一个字符或者字符串在哪个位置
当我们实际应用的时候需要借助substr()来截取字符串,参数为(位置,长度)
size_t i3 = str3.find(':');
if (i3 != string::npos) // 如果为string::npos则为查找至最后一个字符仍未找到
s3 = str3.substr(0, i3);
else
cout << "未找到i3" << endl;
size_t i4 = str3.find('/', i3 + 3);
if (i4 != string::npos)
s4 = str3.substr(i3 + 3, i4 - (i3 + 3));
else
cout << "未找到i4" << endl;
cout << s3 << endl;
cout << s4 << endl;
// 以此类推最终将所以字符分区
输出如下:恰好分区
find_first_of()实际上作用是 找到符合设定的所有字符,这一段代码恰好将找到的的字符赋值为*,然后find_first_not_of则是找到不符合设定的所有字符