• C++STL——string类


    目录

    1.string类的文档链接

    2.string的定义方式

    3.string的插入

    ①使用insert插入

    ②使用push_back尾插

    4.string的删除

    ①使用erase删除

    ②使用pop_back尾删

    5.string的拼接(append函数)

    6.string的查找

    7.string的交换(swap函数)

    8.string的大小和容量

    ①capacity函数获取当前对象所分配的存储空间的大小

    ②size函数或length函数获取当前有效字符的个数

    ③resize函数改变当前对象的有效字符的个数

    ④reserve函数改变当前对象的容量大小

    ⑤clear函数清空对象

    ⑥empty函数判空

    9.string中元素的访问

    ②使用at访问对象中的元素

    ③范围for访问对象中的元素

    ④使用迭代器访问对象中的元素

    10.string中的getline函数

    11.string中子字符串的提取(substr函数)

    substr函数提取string中的子字符串

    12.string与字符串之间的转换

    ①c_str函数将string转换为字符串

    ②将字符串转换为string

    13.string中运算符的使用

    operator+=


    1.string类的文档链接

    https://cplusplus.com/reference/string/string/

    2.string的定义方式

    string();  //构造一个空字符串

    string(const string& str);  //拷贝构造str

    string(const string& str, size_t pos, size_t len = npos);  //拷贝str中从字符位置pos开始连续len个字符的部分

    string(const char* s);  //复制s所指的字符序列

    string(const char* s, size_t n);  //复制s所指字符序列的前n个字符

    string(size_t n, char c);  //实现一个n个c字符的字符串

    代码示列:

    int main()
    {
        string s("pride");
        const char* cs = "lov";


        string s1;
        string s2(s);
        string s3(s, 3, 4);
        string s4(cs);
        string s5(cs, 2);
        string s6(5, 'e');

    }

    3.string的插入

    ①使用insert插入

    1.string& insert (size_t pos, const string& str);
    2.string& insert (size_t pos, const char* s);

    代码示列:

    string s("pride");
    string s1("lov");

    s.insert(3, s1);
    s.insert(0, "long");

    ②使用push_back尾插

    void push_back (char c);

    代码示列:

    string s("pride");
    s.push_back('o');

    4.string的删除

    ①使用erase删除

    string& erase (size_t pos = 0, size_t len = npos);//从pos位置删除len个字符
    iterator erase (iterator p);//pos位置
    iterator erase (iterator first, iterator last);//迭代器区间

    代码示列:

    string s("long pride");
    s.erase(6, 2);
    s.erase(s.end()-1);
    s.erase(s.begin() + 1, s.end()-1);

    ②使用pop_back尾删

    void pop_back();

    代码示列:

    string s("long pride");
    s.pop_back();
    s.pop_back();

    5.string的拼接(append函数)

    append常用接口

    1.string& append (const string& str);
    2.string& append (const char* s);
    3.string& append (size_t n, char c);

    代码示列:

    string s("pri");
    string s1("de");
    s.append(s1);
    const char* cs = "long";
    s.append(cs);
    s.append(2, 'e');

    6.string的查找

    find函数正向搜索第一个匹配项

    size_t find (const string& str, size_t pos = 0) const;
    size_t find (const char* s, size_t pos = 0) const;
    size_t find (char c, size_t pos = 0) const;

    代码示列:

    string s("long pride is pound");
    string fs("prde is");
    size_t fpos = s.find(fs);
    size_t pos = s.find("ride");//第二个参数为缺省参数,不写默认从开始位置
    size_t pos1 = s.find('g');
    cout << fpos << endl;//没找到,返回的是4294967295
    cout << pos << endl;//6
    cout << pos1 << endl;//3

    rfind函数反向搜索第一个匹配项

    size_t rfind (const string& str, size_t pos = npos) const;
    size_t rfind (const char* s, size_t pos = npos) const;
    size_t rfind (char c, size_t pos = npos) const;

    代码示列:

    string s("long pride is pound");
    string fs("pride is");
    size_t fpos = s.rfind(fs);
    size_t pos = s.rfind("ride");
    size_t pos1 = s.rfind('i');

    cout << fpos << endl;//5
    cout << pos << endl;//6
    cout << pos1 << endl;//11

    7.string的交换(swap函数)

    swap函数常用接口

    void swap (string& x, string& y);
    void swap (string& str);

    代码示列

    string s("pride");
    string s1("intell");
    string s2("pound");
    swap(s, s1);
    s.swap(s2);

    8.string的大小和容量

    capacity函数获取当前对象所分配的存储空间的大小

    size_t capacity() const;

    代码示列

    string s("pound");
    size_t capa = s.capacity();
    cout << capa << endl;//15,说明可用空间为15

    ②size函数或length函数获取当前有效字符的个数

    size_t size() const;
    size_t length() const;

    代码示列

    string s("long is free");
    cout << s.size() << endl;//12
    cout << s.length() << endl;//12

    ③resize函数改变当前对象的有效字符的个数

    void resize (size_t n);
    void resize (size_t n, char c);

    代码示列

    string s("long is free");
    s.resize(15);
    s.resize(16, '#');

    cout << s << endl;//打印 long is free#
    cout << s.size() << endl;//16
    cout << s.length() << endl;//16

    resize函数的性质
        1、当n大于对象当前的size时,将size扩大到n,扩大空间用字符c填充,若c未显示,则默认为’\0’。
        2、当n小于对象当前的size时,将size缩小到n。

    string s("long is free");
    s.resize(6);
    cout << s << endl;//打印 long i
    cout << s.size() << endl;//6

    reserve函数改变当前对象的容量大小

    void reserve (size_t n = 0);

    reserve函数的性质
     1、当n大于对象当前的capacity时,将capacity扩大到n或大于n。
     2、当n小于对象当前的capacity时,什么也不做。

    注:此函数对字符串的size没有影响,无法操作字符串内容

    代码示列

    string s("leetcode");
    cout << s.capacity() << endl;//15
    s.reserve(16);
    cout << s.capacity() << endl;//31

    clear函数清空对象

    void clear();

    代码示列

    string s("pride");
    s.clear();

    empty函数判空

    bool empty() const;

    代码示列

    string s("pride");
    s.clear();
    cout << s.empty() << endl;//打印1

    9.string中元素的访问

    [ ]+下标访问

    char& operator[] (size_t pos);//可修改对象内容
    const char& operator[] (size_t pos) const;//const修饰

    代码示列

    string s("long is pride");
    for (int i = 0; i < s.size(); i++)
    {
         s[i] += 1;//可修改对象内容
         cout << s[i] << " ";

    }

    使用at访问对象中的元素

    char& at (size_t pos);
    const char& at (size_t pos) const;

    代码示列

    for (int i = 0; i < s.size(); i++)
    {
        s.at(i) += 1;
        cout << s.at(i) << " ";
    }

    范围for访问对象中的元素

    for (auto& e : s)//修改必须是引用做参数
        {
            e += 1;
        }
        for (char e : s)//auto自动推导类型,也可显示写
        {
            cout << e << " ";
        }

    使用迭代器访问对象中的元素

        string::iterator it = s.begin();
        while (it != s.end())
        {
            *it += 1;//修改
            cout << *it << " ";
            it++;
        }

    10.string中的getline函数

    使用cin或scanf输入时,遇到空格或者\0就会停止,那么如何读一整行字符?使用getline函数即可

    ①读到\n符停止

    istream& getline (istream& is, string& str);

    代码示列

    string s;
    getline(cin, s);

    getline函数将从is中提取到的字符存储到str中,直到读取到换行符’\n’为止

    ②读到delim字符停止

    istream& getline (istream& is, string& str, char delim);

    代码示列

    string s;

    getline(cin, s, 'd');

    getline函数将从is中提取到的字符存储到s中,直到读取到分隔符delim或换行符’\n’为止

    11.string中子字符串的提取(substr函数)

    substr函数提取string中的子字符串

    string substr (size_t pos = 0, size_t len = npos) const;

    代码示列

    string s("study is good thing");
    string s1 = s.substr(6, 7);
    cout << s1 << endl;//打印 is good

    12.string与字符串之间的转换

    ①c_str函数将string转换为字符串

    const char* c_str() const;

    代码示列

    string s("pride");
    const char* str = s.c_str();
    cout << str+3;//从第三个位置开始打印 de

    将字符串转换为string

    代码示列

    const char* str = "pride";
    string s(str);

    是不是很熟悉,就是string定义的一种

    13.string中运算符的使用

    operator+=

    string& operator+= (const string& str);

    string& operator+= (const char* s);

    string& operator+= (char c);

    代码示列

    string s("pride");
    string s1(" is");
    const char* str = " good";
    s += s1;
    s += str;
    s += '!';

    其他运算符以及其他string类函数可参考string类文档。

  • 相关阅读:
    NLP技术如何为搜索引擎赋能
    服务器密码以及用户名怎么修改
    【21天学习挑战】经典算法之【折半查找】
    「Verilog学习笔记」使用子模块实现三输入数的大小比较
    SpringCloud中Turbine 1.X版本BUG
    2020最新最全版!Java面试题大全
    【华为OD机试真题2023B卷 JAVA&JS】评论转换输出
    基本IO接口技术——微机第七章笔记
    RabbitMQ从入门到入土
    【高危安全通告】微软8月多个漏洞修复
  • 原文地址:https://blog.csdn.net/qq_54717101/article/details/127637481