STL-String
如果要使用 string,需要添加 string 头文件,即 #include(注意 string.h 和 string 是不一样的头文件)。
1.cin 和 cout
1. 字符串可以通过 cin 输入,当遇到空格时就停止输入。
2. 可以通过 cout 直接输出一个字符串。
拓展:当需要读入带空格的字符串时可以用如下两种方式。
//1.使用 getline()
string line;
getline(cin,line);//将控制台一行的内容全部读取到 line 中,遇到回车结束
//2.使用 gets()
char c[50];
gets(c);//读取一行数据
cout<<c<<endl;
2.operator+=
string 中可以直接将两个字符串拼接起来
string a = "aaa";
string b = "bbb";
string c = a + b;
//c:aaabbb
3.compare operator
两个 string 类型的变量可以直接使用 ==、!=、<、<=、>、>= 比较大小,比较规则是字典序。
4.length()/size()
length() 返回 string 的长度,即存放的字符,时间复杂度为 O(1)。size() 用法与 length() 基本相同。
5.insert()
- insert(int index,string):在 index 位置插入字符串 string。
string str = "abcxyz",str2 = "opq";
str.insert(3,str2);//往 str[3] 处插入opq
cout<<str<<endl; //abcopqxyz
- insert(it,it2,it3):it 为原字符的欲插入的位置,it2 和 it3 为待插入字符的首尾迭代器,用来表示串 [it2,it3)将被插入在 it 的位置。
string str = "abcxyz",str2 = "opq";
//在 str 的三号位(即 c 和 x 之间)插入str2
str.insert(str.begin() + 3,str2.begin(),str2.end());
cout<<str<<endl; //abcopqxyz
6.erase()
- erase(it):删除单个元素,it 为要删除的元素的迭代器
- erase(first,last):删除一个区间的所有元素,first 为要删除区间的起始迭代器,last 为要删除区间的末尾迭代器的下一个地址
- erase(index,length):从 index 位置开始,删除长度为 length 的字符串。
7.substr()
substr(index,length):返回从 index 开始,长度为 length 的子串。
8.string::npos
string::npos 是一个常数,其本身的值为 -1,但由于是 unsigned_int 类型,因此可以认为是 unsigned_int 类型的最大值。string::npos 用以作为 find 函数失配时的返回值,可以认为 string::npos 等于 -1 或者 4294967295.
9.find()
1. str.find(str2):当 str2 是 str 的子串时,返回其在 str 中第一次出现的位置;如果 str2 不是 str 的子串,那么返回 string::npos。
2. str.find(str2,index):从 str 的 index 位置开始匹配 str2,返回值同上。
string str = "Thank you for your smile";
string str2 = "you";
if(str.find(str2) != string::npos){
cout<<str.find(str2)<<endl;
}
if(str.find(str2,7) != string::npos){
cout<<str.find(str2,7)<<endl;
}
10.replace()
- str.replace(index,len,str2):把 str 从 index 开始,长度为 len 的子串替换为 str2.
- str.replace(it1,it2,str2):把 str 的迭代器 [it1,it2)范围的子串替换为 str2.
string str = "Maybe you will turn around.";
string str2 = "will not";
string str3 = "surely";
//"Maybe you will not turn around."
cout<<str.replace(10,4,str2)<<endl;
//"surely you will turn around."
cout<<str.replace(str.begin(),str.begin()+5,str3)<<endl;