ase(10, 5);//这么做不行
? ? //cout << str4 << endl;
? ? str4.erase(str4.begin());
? ? cout << str4 << endl;//23456789
? ? str5.erase(str5.begin() + 2);
? ? cout << str5<< endl;//12456789
? ? //str6.erase(str6.begin() + 10);//这么做不行
? ? //cout << str6 << endl;
? ? str6.erase(str6.end() - 2);
? ? cout << str6 << endl;//12345679
? ? //str7.erase(str7.end() - 10);//这么做不行
? ? //cout << str7 << endl;
? ? str7.erase(str7.begin()+2,str7.end()-2);
? ? str7.erase(str7.begin() + 2, str7.end() - 2);
? ? cout << str7 << endl;//1289? 删除从str7.begin()+2(包括str7.begin()+2)到str7.end() - 2(包括str7.end() - 2)的所有字符
? ? //str8.erase(str8.begin() + 7, str8.end() - 5);//这么做不行
? ? //cout << str8 << endl;
? ? return 0;
}
?
?4.clear()
原型:
void clear() noexcept;
作用:
删除字符串的所有内容。
示例:
?
#include
#include
using namespace std;
int main()
{
? ? string str("123456789");
? ? str.clear();
? ? cout << str << endl;//空行
? ? cout << str.length() << endl;//0
? ? return 0;
}
?
?5.insert()
原型:
?
//string (1)
basic_string& insert (size_type pos, const basic_string& str);
//substring (2)
basic_string& insert (size_type pos, const basic_string& str,
? ? ? ? ? ? ? ? ? ? ? size_type subpos, size_type sublen);
//c-string (3)
basic_string& insert (size_type pos, const charT* s);
//buffer (4)
basic_string& insert (size_type pos, const charT* s, size_type n);
//fill (5)
basic_string& insert (size_type pos,? size_type n, charT c);
? ? iterator insert (const_iterator p, size_type n, charT c);
//single character (6)
? ? iterator insert (const_iterator p, charT c);
//range (7)
template
? ? iterator insert (iterator p, InputIterator first, InputIterator last);
//initializer list (8)
basic_string& insert (const_iterator p, initializer_list il);
?
说明:
1)原型(8)与list容器有关,是C++11新标准,这里赞不详述。
2)以上原型中出现的返回值和参数有iterator和InputIterator与迭代器有关,这里也暂不详述,可以将其简单地理解为指针,begin()和end()的返回值与它们匹配。
示例:
?
#include
#include
using namespace std;
int main()
{
? /*
? ? *测试basic_string& insert (size_type pos, const basic_string& str);
? */
? ? string st1("123456789");
? ? //string st2("123456789");
? ? string str1("abc");
? ? st1.insert(3, str1);
? ? cout << st1 << endl;//123abc456789? 注意是在pos所指位置前插入
? ? //st2.insert(10, str1);//超出范围
? ? //cout << st2 << endl;//不可以
? ? /*
? ? **测试basic_string& insert (size_type pos, const basic_string& str,size_type subpos, size_type sublen);
? ? */
? ? string st2("123456789");
? ? string st3("123456789");
? ? string str2("abcdefg");
? ? st2.insert(3, str2, 2, 3);
? ? cout << st2 << endl;//123cde456789
? ? st3.insert(3, str2, 4, 9);//超出范围
? ? cout << st3 << endl;//123efg456789? 可见如果超出字符串的长度,则一直到字符串的最后,不补空格
? ? /*
? ? **测试basic_string& insert (size_type pos, const charT* s);
? ? */
? ? string st4("123456789");
? ? string st5("123456789");
? ? char* str3 = "abc";
? ? st4.insert(3, str3);
? ? cout << st4 << endl;//123abc456789
? ? st5.insert(3, "abc");
? ? cout << st5 << endl;//123abc456789
? ? /*
? ? **测试basic_string& insert (size_type pos, const charT* s, size_type n);
? ? */
? ? string st6("123456789");
? ? string st7("123456789");
? ? st6.insert(3, "abcdefg", 3);//n可以为0,为0时什么也不加 当n为负值时会出现运行时错误
? ? cout << st6 << endl;//123abc456789
? ? st7.insert(3, "abcdefg", 20);//超出范围
? ? cout << st7 << endl;//123abcdefg i n v a l i 456789? 调大n值(如500)进行测试,发现中间多出来的是报错的语句和乱码,且每次运行的输出可能不一样
? ? ? ? ? ? ? ? ? ? ? ? //CodeBlocks12.11上中间直接就是乱码
? ? /*
? ? **测试basic_string& insert (size_type pos,? size_type n, charT c);? 和? iterator insert (const_iterator p, size_type n, charT c);
? ? */
? ? string st8("123456789");
? ? string st9("123456789");
? ? st8.insert(3, 2, 'a');
? ? cout << st8 << endl;//123aa456789
? ? st9.insert(st9.begin() + 3, 2, 'a');
? ? cout << st9 << endl;//123aa456789
? ? /*
? ? **测试iterator insert (const_iterator p, charT c);
? ? */
? ? string ss1("123456789");
? ? ss1.insert(ss1.begin()+3, 'a');//由原型知,这里不能将ss1.begin()+3改为3
? ? cout << ss1 << endl;//123a456789
? ? /*
? ? **测试template
? ? **? ? iterator insert (iterator p, InputIterator first, InputIterator last);
? ? */
? ? string ss2("123456789");
? ? string str4("abcdefg");
? ? ss2.insert(ss2.begin() + 3, str4.begin(), str4.begin()+3);//超出范围会出现运行时错误
? ? cout << ss2 << endl;//123abc456789
? ? return 0;
}
?
?6.append()
原型:
?
//string (1)
basic_string& append (const basic_string& str);
//substring (2)
basic_string& append (const basic_string& s