string
在 C 语言中,提供了字符串的操作,但只能通过字符数组的方式来实现字符串。
而 string
则是一个简单的类,使用简单,在 OI 竞赛中被广泛使用。
相较于其他 STL 容器,string
的常数可以算是非常优秀的,基本与字符数组不相上下。
string常用操作
-
输出
string s = "123"; printf("%s", s.c_str()); cout << s;
-
获取长度
s.size()
s.length()
复杂度为常数。
printf("s的长度为 %d", s.size()); printf("s的长度为 %d", s.length());
-
拼接
直接使用
+
进行拼接。复杂度为\(O(n)\)。
string s1 = "ke"; s1 += "daya"; cout << s1 << endl;//输出kedaya
-
截取子串
substr(pos, len)
:返回从pos
位置开始截取len
个字符组成的字符串(如果从pos
开始的后缀长度不足len
则截取到末尾)。substr(pos)
:返回从pos
位置开始截取到末尾的字符串。
复杂度为\(O(n)\)。
string s = "kedaya"; cout << s.substr(2, 2) << endl;//输出da cout << s.substr(4, 10) << endl;//输出ya cout << s.substr(2) << endl;//输出daya
-
插入/删除字符串
insert(index,str)
:表示在index
处插入字符串str
。erase(index,count)
:函数将字符串index
位置开始(含)的count
个字符删除。erase(index)
:删去index
位置及以后的所有字符。
复杂度为\(O(n)\)。
string s = "AK NOIP", t = " IOI"; s.erase(6, 1); cout << s << endl;//输出AK NOI s.erase(2); cout << s << endl;//输出AK s.insert(2, t); cout << s << endl;//输出AK IOI
-
替换字符
replace(pos,count,str)
:从pos
位置开始count
个字符的子串替换为str
replace(first,last,str)
:以first
开始(含)、last
结束(不含)的子串替换为str
,其中first
和last
均为迭代器。
复杂度为\(O(n)\)。
string s = "ABI"; s.replace(0, 2, "NO"); cout << s << endl;//输出NOI s.replace(s.begin(), s.end() - 1, "I will ak NO"); cout << s << endl;//输出I will ak NOI
-
寻找字符串
find(str)
,返回字符串str
第一次出现的位置,如果没有出现,则返回string::npos
。复杂度不及\(KMP\)算法。
string s = "ke da ya da ya", t = "da", u = "noi"; cout << s.find(t) << endl;//输出3 if(s.find(u) == string::npos) { cout << "No" << endl;//输出No }