(5)erase()
str.erase();
有两种用法,删除单个元素,删除一个区间内的所有元素,时间复杂度均为O(N)
删除单个元素
str.erase(it);
用于删除单个元素,it
为需要删除的元素的迭代器
#include <iostream> #include <string> using namespace std; int main() { string str = "abcdefg"; str.erase(str.begin() + 3); //删除str[3],即'd' cout << str; return 0; }
输出结果为:abcefg
删除一个区间内的所有元素
str.erase(first, last);
,其中first
为需要删除的区间的起始迭代器,last
则为需要删除的区间的末尾迭代器的下一个地址,即删除[first, last)
#include <iostream> #include <string> using namespace std; int main() { string str = "abcdefg"; str.erase(str.begin() + 3, str.end()); //删除str[3] ~ str[6] cout << str; return 0; }
输出结果为:abc
str.erase(pos, length);
其中pos
为需要开始删除的起始位置,length
为删除的字符个数
#include <iostream> #include <string> using namespace std; int main() { string str = "abcdefg"; str.erase(3, 4); //删除str[3] ~ str[6] cout << str; return 0; }
输出结果为:abc
(6)clear()
str.clear();
用来清空string
中的数据,时间复杂度一般为O(1)
#include <iostream> #include <string> using namespace std; int main() { string str = "abcdefg"; str.clear(); cout << str.size(); return 0; }
输出结果为:0
(7)substr()
str.substr(pos, len);
用来返回从pos
号位开始,长度为len
的子串,时间复杂度为O(len)
#include <iostream> #include <string> using namespace std; int main() { string str = "abcdefg"; cout << str.substr(3, 4); return 0; }
输出结果为:defg
(8)string::npos
string::npos
是一个常数,其本身的值为-1
或者等于4294967295
,两个值都被认为是正确的
#include <iostream> #include <string> using namespace std; int main() { if (string::npos == -1) cout << "true" << endl; return 0; }
输出结果为:true
(9)find()
str.find(str2),当str2是str的子串时,返回其在str中第一次出现的位置,如果str2不是str的子串,返回string::npos
str.find(str2, pos),从str的pos号位开始匹配str2,返回值和上述相同
时间复杂度为O(nm),其中n和m分别是str和str2的长度
#include <iostream> #include <string> using namespace std; int main() { string str = "chen must like C++"; string str1 = "like"; string str2 = "C++"; string str3 = "not"; if (str.find(str1) != string::npos) cout << str.find(str1) << endl; if (str.find(str2) != string::npos) cout << str.find(str2) << endl; if (str.find(str3) != string::npos) cout << str.find(str3) << endl; else cout << "Wrong"; return 0; }
输出结果为:
10
15
Wrong
(10)replace()
str.replace(pos, len, str2);把str从pos号位开始,长度为len的子串替换为str2
str.replace(it1, it2, str2)把str的迭代器[it1, it2)范围的子串替换为str2
时间复杂度为O(str.length())
#include <iostream> #include <string> using namespace std; int main() { string str = "chen must like C++"; string str2 = "algorithm"; string str3 = "math"; cout << str.replace(15, 3, str2) << endl; cout << str.replace(str.begin() + 15, str.end(), str3); return 0; }
输出结果为:
chen must like algorithm
chen must like math