// 在p0位置插入字符串s的前n个字符 // string &insert(int p0, const char *s, int n); string s = "abcde"; s.insert(2,"12345",3); // ab123cde
// 在p0位置插入字符串s // string &insert(int p0,const string &s); string s = "abcde"; string n = "12345"; s.insert(2,n); // ab12345cde
// 在p0位置插入字符串s从pos开始的连续n个字符 // string &insert(int p0,const string &s, int pos, int n); string s = "abcde"; string n = "12345"; s.insert(2,n,2,2); // ab34cde
// 在p0处插入n个字符c // string &insert(int p0, int n, char c); string s = "abcde"; s.insert(2,5,'*'); // ab*****cde
字符串拼接 append()
使用string类自带的 append() 或者用 + 也可以收到同样效果。
以下代码来自C++说明文档
std::basic_string<char> str = "string"; constchar* cptr = "C-string"; constchar carr[] = "Two and one"; std::string output; // 1) Append a char 3 times. // Notice, this is the only overload accepting chars. output.append(3, '*'); // ***
// 2) Append a whole string output.append(str); // ***string
// 3) Append part of a string (last 3 letters, in this case) output.append(str, 3, 3); // 下标从0开始,第三个位置(i)的连续三个(ing) // ***stringing
// 4) Append part of a C-string // Notice, because `append` returns *this, we can chain calls together output.append(1, ' ').append(carr, 4); // 可以连用,后面表示加上 carr[] 的前4个,注意和string类型区别 // ***stringing Two
// 5) Append a whole C-string output.append(cptr); // ***stringing Two C-string // 6) Append range output.append(&carr[3], std::end(carr)); // 加上从 carr[] 的第3个位置开始,到结束 // ***stringing Two C-string and one
// 7) Append initializer list output.append({ ' ', 'l', 'i', 's', 't' }); // 添加列表 // ***stringing Two C-string and one list
for(auto riter=s.rbegin(); riter<s.rend(); riter++) { cout<<*riter<<" "; }// 反向输出,得到 d c b a
删除字符 erase()
erase() 方法中的参数,可以使用迭代器,也可以指定索引位置。返回值是操作后的字符串。
string n = "abcdef"; n.erase(n.begin()); // bcdef // 这里begin()返回一个迭代器,若参数是迭代器,则只删除迭代器指向的位置
std::string s = "This Is An Example"; s.erase(7, 3); // erases " An" using overload (1) // string& erase(size_t pos=0, size_t len = npos); // 参数pos表示要删除字符串的起始位置,其默认值是0;len表示要删除字符串的长度,其默认值是string::npos // 删除从第7个位置开始,长度是3,不输入长度默认后面全删除完 // This Is Example
s.erase(std::find(s.begin(), s.end(), ' ')); // erases first ' '; overload (2) // 查找第一个空格的位置,并删除 // ThisIs Example
s.erase(s.find(' ')); // trims from ' ' to the end of the string; overload (1) // ThisIs
auto it = std::next(s.begin(), s.find('s')); // obtains iterator to the first 's' s.erase(it, std::next(it, 2)); // erases "sI"; overload (3) // 迭代器用法,先找到第一个s的位置,然后删除s开始的两个字符 // This