《算法笔记》6.3小节——C++标准模板库(STL)介绍->string的常见用法详解
1、头文件
#include <string>
using namespace std;
2、定义
string str;
str="ABC";
//初始化时赋值
string str = "ABC";
读入输出只能用cin和cout
string str;
cin>>str;
cout<<str;
string类型转换为字符数组用c_str()函数
printf("%s\n",str.c_str());
3、访问
①下标访问,通字符数组
printf("%c",str[5]);
②通过迭代器访问
string和vector都支持对迭代器加减数字
string::iterator ip=str.begin();
printf("%c", *(ip+4)); //此时*(ip+4)等价于str[4];
//用*ip访问
for(string::iterator ip=str.begin();ip!=str.end();ip++){
printf("%c", *ip);
}
4、函数
①拼接两个字符串+=
str3=str1+str2;
str1+=str2;
②字符串比较,规则为字典序
可直接用==, !=, <, <=, >, >=进行比较
③元素个数/长度size()/length()
时间复杂度O(1)
//返回值为unsigned,一般用%d
num=str.size();
num=str.length();
④插入insert
a. insert(pos,string);在pos号位置插入字符串string,pos∈[1,str.length());
b. insert(ip, ip2, ip3);在原字符串str的ip位置,插入以ip2和ip3为收尾迭代器的字符串,即串[ip2, ip3)插到ip的位置
//在str[3]的位置插入str2或abc
str.insert(3,str2);
str.insert(3,"abc");
//在str的第三个位置即str[2]插入str2[2]至str2结尾的字符串
str.insert(str.begin()+3,str2.begin().3,str.end());
⑤清空clear
时间复杂度O(1)
si.clear();
⑥删除单个元素或一个区间内的所有元素eraser
时间复杂度O(N)
//删除迭代器所在位置的元素,如删除第4位元素
str.eraser(str.begin()+4);
//删除[first,last)区间内的元素,如删除第2位至末尾之间的元素
str.eraser(str.begin()+2,str.end())
//删除从第pos位开始,长度为len的字符串
str.eraser(str.begin()+pos, 5);
⑦得到从第pos开始,长度为len的子串sbustr()
substr(pos,len)
⑧特殊常数
string::npos是一个常数,unsigned int类型,值为-1/4294967295
可以作为find查找失败的返回值
⑨查找子串find()
时间复杂度O(MN);
查找str2在母串str中第一次出现的位置str.find(str2);
从母串str的第pos位开始,查找str2在母串str中第一次出现的位置str.find(str2,pos);
⑩子串替换replace()
时间复杂度O(str.length());
把母串str从第pos位开始,长度为len的子串替换为str2:str.reolace(pos,len,str2);
把母串str的迭代器[ip1,ip2)范围内的子串替换为str2:str.replace(ip1,ip2,ste2);