头文件:string(不是string.h,这是两个不同的头文件)
在std命名空间内(using namespace std;)
string的定义
string str;
也可以直接初始化:
string str = “Hello World!”
注:要读入和输出整个字符串,必须使用cin和cout。
string中内容的访问
通过下标访问
str[i]
c_str()可以将string类型转换成char[]类型输出,eg:
#include<iostream>
#include<string>
using namespace std;
int main(){
string str = "abcdef";
printf("%s\n",str.c_str());
return 0;
}
通过迭代器访问
一般通过下标访问就可以满足访问要求,但是有些函数,比如insert()和erase()则要求以迭代器为参数。
string的迭代器不需要参数:
string::iterator it;
这样就可以通过*it访问string中的每一位:
#include<iostream>
#include<string>
using namespace std;
int main(){
string str = "abcdef";
for(string::iterator it = str.begin(); it != str.end(); it++){
printf("%c",*it);
}
return 0;
}
注:string的迭代器支持进行加减某个数的操作,例如str.begin()+5是可行的。
string常用函数
1. operator +=
字符串拼接
2. compare operator
==、!=、<、<=、>、>=,按字典序排
3. length() / size()
返回string的长度,即存放的字符数
4. insert()
insert()函数有很多种写法,记录几种常见写法:
(1) insert(pos, string) :在pos号位置插入字符串string
(2)insert(it, it2, it3):it为原字符串的插入为止,it2和it3为待插字符串的首位迭代器,eg:
#include<iostream>
#include<string>
using namespace std;
int main(){
string str = "abcxyz", str2 = "opq"; //str为原字符串,str2为待插字符串
//在str的3号位置(c和x之间)插入str2
str.insert(str.begin()+3, str2.begin(), str2.end());
cout << str << endl;
return 0;
}
5. erase()
erase()有两种用法:删除单个元素、删除一个区间内的元素。
(1)删除单个元素:str.erase(it)
#include<iostream>
#include<string>
using namespace std;
int main(){
string str = "abcxyz";
str.erase(str.begin()+3); //删除了x
cout << str << endl;
return 0;
}
(2)删除一个区间内的元素
有两种方法。
(2a) str.erase(first, last),first为需要删除区间的起始迭代器,last为需要删除的区间的末尾迭代器的下一个地址,即[first, last)。
(2b) str.erase(pos, length),pos为要开始删除的起始位置,length为删除字符个数。
6. clear()
clear()用以清空string中的数据
#include<iostream>
#include<string>
using namespace std;
int main(){
string str = "abcxyz";
cout << str.length() << ' ' << str << endl;
str.clear(); //删除了x
cout << str.length() << ' ' << str << endl;
return 0;
}
7. substr()
substr(pos, len),返回从pos开始,长度为len的子串。
8. string::npos
string::npos是一个常数,其本身的值为-1,但由于是unsigend_int类型,因此实际上也可以认为是unsigend_int类型的最大值。
string::npos用以作为find函数失配使的返回值。
9. find()
(9a) str.find(str2),当str2是str的子串时,返回str2在str中第一次出现的位置;如果str2不是str的子串,返回string::npos。
(9b) str.find(str2, pos),从str的pos位开始匹配str2,返回值同上。
10. replace()
(10a) str.replace(pos, len, str2),把str从pos位开始,长度为len的子串替换为str2。
(10b) str.replace(it1, it2, str2),把str的迭代器[it1, it2)范围内的子串替换为str2。