因为刷leetcode会需要用到一些c++已经实现的函数功能,所以在此记录,以便复习巩固。
参考文章连接:
C++中string类型的erase()函数详解
C++ string类的insert函数的介绍及使用
string的erase函数()
1 删除指定位置的字符
通过迭代器来删除指定字符
iterator erase (iterator p);
int main(){string s = "123456789";s.insert(2,"p");//输出:12p3456789cout << s<<endl;s.erase(s.begin()+2);//输出:123456789cout << s<<endl;
}
2 删除指定长度的字符串
通过字符串的索引,和长度来删除
string& erase(size_t pos=0, size_t len = npos);
int main(){string s = "123456789";s.insert(2,"p");cout << s<<endl;//输出:12p3456789s.erase(2,1);cout << s<<endl;//输出:123456789
}
注意:如果传入的是索引,长度不穿,那么就会把索引后的元素都删除
int main(){string s = "123456789";s.insert(2,"p");cout << s<<endl;//输出:12p3456789s.erase(2);cout << s<<endl;//输出:12
}
3 删除指定范围的字符串
通过首尾两个迭代器来删除
iterator erase (iterator first, iterator last);
int main(){string s = "123456789";s.erase(s.begin()+2,s.end()-2);cout << s<<endl;//输出:1289
}
string的insert函数()
1 指定位置插入字符(char)
(1)string &insert(int p0, int n, char c); 功能:在p0处插入n个字符c 返回值:插入字符串后的结果
(2)void insert(iterator it, int n, char c); 功能:在it处插入n个字符c
(3)iterator insert(iterator it, char c) 功能:在it处插入字符c 返回值:插入字符的位置
int main(){string s = "123456789";s.insert(0,1,'p');cout << s<<endl;//输出:p123456789string s1 = "123456789";s1.insert(0,2,'p');cout << s1<<endl;//输出:pp123456789string s2 = "123456789";s2.insert(s2.begin(),'p');cout << s2<<endl;//输出:p123456789string s3 = "123456789";s3.insert(s3.begin(),2,'p');cout << s3<<endl;//输出:pp123456789
}
2 指定位置插入字符串(string)
(1)string &insert(int p0,const string &s);
功能:在p0位置插入字符串s
返回值:插入字符串后的结果
(2)string &insert(int p0,const string &s, int pos, int n);
功能:在p0位置插入字符串s从pos开始的连续n个字符
返回值:插入字符串后的结果
int main(){string s1= "1234";string s2= "5678";s1.insert(4,s2);cout << s1 << endl;//输出:12345678string s3= "1234";string s4= "5678";s3.insert(4,s2,0,2);cout << s3 << endl;//输出:123456
}
3 根据迭代器插入字符串
(1)void insert(iterator it, const_iterator first, const_iteratorlast);
功能:在it处插入从first开始至last-1的所有字符
int main(){string s1= "1234";string s2= "5678";s1.insert(s1.end(),s2.begin(),s2.end());cout << s1 << endl;//输出:12345678
}
总结
插入的操作需要记住的是:
- 如果提供的位置是字符串的索引,那么插入操作是把这个索引包含进行插入。
- 如果提供的是字符串的迭代器,那么插入操作也是把这个迭代器包含进行插入,这也是为什么在字符串
s1
末尾进行插入的时候,提供的迭代器是s1.end()
(指向s1尾部元素的下一个元素地址,如果提供s1.end()-1
就会把最后一个元素推到新字符串的最后一个元素)。例子:
int main(){string s1= "1234";string s2= "5678";s1.insert(s1.end()-1,s2.begin(),s2.end());cout << s1 << endl;//输出:12356784
}
总的来说,需要注意insert这个函数操作的范围。