erase的3种用法:
(1)string& erase ( size_t pos = 0, size_t n = npos );
(2)iterator erase ( iterator position );
(3)iterator erase ( iterator first, iterator last );
-
erase(pos,n);
删除从pos开始的n个字符,比如erase(0,1)就是删除第一个字符 -
erase(position);
删除position处的一个字符(position是个string类型的迭代器) -
erase(first,last);
删除从first到last之间的字符(first和last都是迭代器)
int test()
{
string str("This is an example phrase.");
string::iterator it;
// 第(1)种用法
str.erase(10, 8);
cout << str << endl; // "This is an phrase."
// 第(2)种用法
it = str.begin() + 9;
str.erase(it);
cout << str << endl; // "This is a phrase."
// 第(3)种用法
str.erase(str.begin() + 5, str.end() - 7);
cout << str << endl; // "This phrase."
return 0;
}
结果:
This is an phrase.
This is a phrase.
This phrase.
请按任意键继续. . .
例子:去掉字符串中的重复字符
int color_brick(string str){
int res = 0;
sort(str.begin(), str.end());
cout << "sorted: " << endl << str << endl;
str.erase(unique(str.begin(), str.end()), str.end());
//unique的作用:是“去掉”容器中相邻元素的重复元素,这里去掉要加一个引号,为什么呢,是因为它实
质上是一个伪去除,它会把重复的元素添加到容器末尾,而返回值是去重之后的尾地址(是地址!)
cout << "erased: " << endl << str << endl;
if (str.size() == 1)
res = 1;
else if (str.size() == 2)
res = 2;
return res;
}
void test(){
string str;
while (true){
cin >> str;
cout << color_brick(str) << endl;
}
}
结果:
sakdnasd9oqwdnas
sorted:
9aaadddknnoqsssw
erased:
9adknoqsw