STL—string(二)

简介: string中的函数

(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



目录
相关文章
|
3月前
|
存储 自然语言处理 安全
C++ STL标准库 《string原理与实战分析》
C++ STL标准库 《string原理与实战分析》
59 0
|
26天前
|
存储 算法 程序员
【STL】string
【STL】string
|
3月前
|
安全 算法 C语言
【C++进阶】深入STL之string:掌握高效字符串处理的关键
【C++进阶】深入STL之string:掌握高效字符串处理的关键
38 1
【C++进阶】深入STL之string:掌握高效字符串处理的关键
|
3月前
|
编译器 C++
【C++进阶】深入STL之string:模拟实现走进C++字符串的世界
【C++进阶】深入STL之string:模拟实现走进C++字符串的世界
33 1
|
3月前
|
程序员 C++
C++初阶学习第七弹——探索STL奥秘(二)——string的模拟实现
C++初阶学习第七弹——探索STL奥秘(二)——string的模拟实现
29 1
|
3月前
|
C语言 C++
C++初阶学习第六弹——探索STL奥秘(一)——标准库中的string类
C++初阶学习第六弹——探索STL奥秘(一)——标准库中的string类
27 0
|
3月前
|
算法 Linux C语言
7.学习STL和string类:版本、组件、构造、操作及应用
7.学习STL和string类:版本、组件、构造、操作及应用
|
3月前
|
编译器 C语言 C++
【C++/STL】:string类底层的模拟实现
【C++/STL】:string类底层的模拟实现
28 0
|
3月前
|
算法 C++ 容器
【C++/STL】:string类的基本使用
【C++/STL】:string类的基本使用
21 0
|
3月前
|
C++ 容器 存储
【C++语言】想学STL,先细细拿捏string类,万字详解string类 (内附精美思维导图)
【C++语言】想学STL,先细细拿捏string类,万字详解string类 (内附精美思维导图)