使用string前,需添加 string 头文件 < string>
定义
string str;
str="faro_z";
如果想要输入一串带空格的string,需要使用getline()
string str;
getline(cin,str);
1.通过迭代器或下标访问
由于 string 不像其他 STL 容器那样需要参数,因此可以直接如下定义:
string::iterator it;
for(it = str.begin(); it != str.end(); it++)
cout<<*it<<" ";
string也可以通过下标直接访问,使用下标后,下标元素类型变为char
string str="abc";
cout<<str[1]<<endl;//结果为'b'
string 与 vector 一样,支持直接对迭代器进行加减某个数字,如 str.begin() + 3,效果等同于str[3];
2.operator +=
这是 string 的加法,可以将两个 string 直接拼接起来:
str3 = str2 + str1;
str1 += str2;
3. compare operator
两个 string 类型可以直接使用 ==、!=、<、<=、>、>= 比较大小,比较规则是字典顺序。
4.常用函数
1)length()、size()
都是返回 str 的长度。
str.length()、str.size();
2)insert()
insert(pos,string):在 pos 号位置插入字符串 string
insert(it,it1,it2):it 为原字符串的欲插入位置,it2 和 it3 为待插字符的首尾迭代器,用来表示串 [it2,it3) 将被插在 it 的位置上。
str.insert(str.begin() + 3, str2.begin(),str2.end());
//str 中 三号位将被挤到后面去
3)erase()
erase() 有两种用法:删除单个元素、删除一个区间内的所有元素。
//删除一个元素:
str.erase(it);
str.erase(str.begin() + 3);
//删除一个区间
erase[first,last);
str.erase(str.brgin() + 2, str.end() - 1);
或
str.erase(pos,length)
//其中 pos 为需要开始删除的位置,length 为删除的字符个数。
如:string str = "abcdefg";
str.erase(3,2);
//结果:abcfg
4)clear()
str.clear();
5)substr()
substr(pos,len); //返回从 pos 号位开始,长度为 len 的子串
string s = "abcdefg";
cout << s.substr(0,4) << endl; //--> "abcd"
6)string::npos
string::npos 是一个常数,其本身值为 -1,但由于是 unsigned_int 类型,因此实际上也可以认为是 unsigned_int 类型的最大值。string::npos 用以作为 find 函数匹配失败时候的返回值,可以认为 string::npos 等于 -1 或 4294967295。
if(string::npos == -1)
{
···
}
if(string::npos == 4294967295)
{
···
}
7)find()
str.find(str2),当 str2 是 str 的子串时,返回其在 str 中第一次出现的位置,如果 str2 不是 str 的子串,那么返回 string::npos。
str.find(str2,pos); //从 str 的 pos 号位置开始匹配 str2 ,
//返回值与上相同。
8)replace()
str.replace(pos,len,str2); //把 str 从 pos 号位置开始,
//长度为 len 的子串替换为 str2。
str.replace(it1,it2,str2); //把 str 的迭代器 [it1,it2)
//范围的子串替换为 str2。
了解了(6),(7),(8),我们就可以开始搞一点事情了
熟悉stl模板类,可以帮助我们快速搞定OJ
例1:删除一串字符中选定的内容
void remove(string &str,string tmp)
{
while(str.find(tmp)!=string::npos)
{
int loc=str.find(tmp);
str.erase(loc,tmp.length());
}
return;
}
例2:修改选定字符
void replace(string &str,string beReplaced,string replace)
{
while(str.find(beReplaced)!=string::npos)
{
int loc=str.find(beReplaced);
str.replace(loc,beReplaced.length(),replace);
}
return;
}
最后奉上博客的思维导图