C++ STL String用法

发布时间 2023-11-17 17:59:47作者: 可爱的卤蛋

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,其中 firstlast 均为迭代器

    复杂度为\(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
    }
    
模板题目

洛谷P5733自动修正

洛谷P1308统计单词数