STL在C++中起到非常重要的作用,最大的好处就是将常见的数据结构进行了封装,使得我们不需要从底层一步步去实现,使用起来非常方便。C++知识小屋🏠的STL系列旨在将常见STL库的常见函数进行小结,以函数+示例+结果展示的方式作为文章的整体结构。希望能够在用到这些库的时候能够快速上手,熟练地使用它们来解决一些常见的问题。
string
string字符串可以说是C++最常用的STL,其内部包含了非常多的函数,本文列举了最常见的功能:赋值,截取子串,增删改查。
使用string前需要先导入string的库:
#include <string>
string的赋值函数assign
如果要将字符串A赋值给B,可以直接使用 “=” 符号的方式,也可以使用assign的方式。
其中assign的方式还可以截取A中的某个字串赋值给B,比如下面的最后的一个例子
string A = "abcdef";
cout << A << endl; //"abcdef"
string B;
B = A; //使用运算符进行赋值
cout << B << endl; //"abcdef"
B.assign(A); //将A字符串赋值给B
cout << B << endl; //"abcdef"
B.assign(A,2,4); //将A字符串的第3字符(c)开始的4个字符赋值给B
cout << B << endl; //"cdef"
string的拼接
- string相比于char*的一个最大的优势就是重载了常见的运算符,比如+=(拼接两个字符串),>,<,=(比较两个字符串的大小)。下面介绍了拼接字符串的两个方法:
- 使用+=的方法将A字符串拼接在D的后面
- 使用append(string a)函数进行拼接 :表示在原来字符串的末尾加上a字符串
string A = "abcdef";
cout << A << endl; //"abcdef"
//字符串拼接
string D = "AAAB";
D += A;
cout << D << endl; //"AAABabcdef"
//等同于 +=
string E = "AAAB";
E.append(A);
cout << E << endl; //"AAABabcdef"
string的查找
如果我们想在字符串中找到某个元素出现的位置,就可以用下面的方式:
比如我们想要在字符串E中寻找A第一次出现的位置,可以用find的方式和find_first_of()的方式
- E.find(‘A’,0) 表示从E中寻找A字符,0表示是从第零个位置开始往后找,即从头开始,这个0也可省去。
如果我们想找A在E中出现的最后一个位置,可从后往前寻找,使用rfind()函数和find_last_of()的方式
- E.rfind(‘A’) 表示从E中从后开始寻找A字符第一次出现的位置,由于对于E字符串可看到’A’最后一次出现的位置是在第三位,所以返回2(下标是从0开始计算的)
string E = "AAABabcdef";
cout << E << endl; //"AAABabcdef"
//从前往后找某个元素第一次出现的位置,若没有,返回-1
int a = E.find('A',0);
cout << a << endl; // 0
//从后往前找某个元素第一次出现的位置,若没有,返回-1
int b = E.rfind('A');
cout << b << endl; // 2
//寻找某个元素第一次出现的位置,等效于find
int c =E.find_first_of('A');
cout << c << endl; // 0
//寻找某个元素最后一次出现的位置,等效于rfind
int e = E.find_last_of('A');
cout << e << endl; // 2
substr函数截取字符串子串
如果我们想获取一个字符串的中间的某个部分,可使用substr函数:
substr(int a,int b):获取字符串从第a个位置开始往后的b个字符。
//F.replace(0,3,"7890"):从第零个位置开始的三个字符替换成“7890”
string F;
F = "123456";
cout << F << endl;
//子串: (从第零个位置开始截取四个字符)
cout << F.substr(0,4) << endl; //1234
string的修改,插入,删除
- replace(int a,int b,string c)函数为字符串的替代修改函数,可将字符串的第a个位置开始往后的b个字符用c字符串来填补,比如下面例子中将字符串的前三个字符"123"用"7890"进行了替代。
- insert(int a,string b)函数为插入函数,可在字符串的第a个位置前面插入b字符串。
- erase(int a,int b)函数为删除函数,可将字符串的第a个位置开始往后的b个字符进行删除。
- 下面是一个栗子,将三个功能进行了整合:
- 需要注意的是,对于F字符串,其会随着每一个函数的进行而发生改变,比如进行了replace操作后的F字符串已经发生了改变,此时进行insert操作的时候拿的是replace之后的F字符串进行操作,而不是最开始的F字符串。
string F;
F = "123456";
cout << F << endl;
//F.replace(0,3,"7890"):从第零个位置开始的三个字符替换成“7890”
F.replace(0,3,"7890");
cout << F << endl; // "7890456"
//从第零个位置开始插入"666"
F.insert(0,"666");
cout << F << endl; // "6667890456"
//从第零个位置开始删除三个元素
F.erase(0,3);
cout << F << endl; // "7890456"
完整程序
#include <iostream>
#include <string>
using namespace std;
int main()
{
string A = "abcdef";
cout << A << endl; //"abcdef"
string B;
B = A; //使用运算符进行赋值
cout << B << endl; //"abcdef"
B.assign(A); //将A字符串赋值给B
cout << B << endl; //"abcdef"
B.assign(A,2,4); //将A字符串的第3字符(c)开始的4个字符赋值给B
cout << B << endl; //"cdef"
//字符串拼接
string D = "AAAB";
D += A;
cout << D << endl; //"AAABabcdef"
//等同于 +=
string E = "AAAB";
E.append(A);
cout << E << endl; //"AAABabcdef"
//从前往后找某个元素第一次出现的位置,若没有,返回-1
int a = E.find('A',0);
cout << a << endl; // 0
//从后往前找某个元素第一次出现的位置,若没有,返回-1
int b = E.rfind('A');
cout << b << endl; // 2
//寻找某个元素第一次出现的位置,等效于find
int c =E.find_first_of('A');
cout << c << endl; // 0
//寻找某个元素最后一次出现的位置,等效于rfind
int e = E.find_last_of('A');
cout << e << endl; // 2
//F.replace(0,3,"7890"):从第零个位置开始的三个字符替换成“7890”
string F;
F = "123456";
cout << F << endl;
//子串: (从第零个位置开始截取四个字符)
cout << F.substr(0,4) << endl; //1234
F.replace(0,3,"7890");
cout << F << endl; // "7890456"
//从第零个位置开始插入"666"
F.insert(0,"666");
cout << F << endl; // "6667890456"
//从第零个位置开始删除三个元素
F.erase(0,3);
cout << F << endl; // "7890456"
return 0;
}