【C++】string的常用函数用法总结

1 string的构造函数的形式

string str1 = "123re23r";
    std::cout << str1 << " addr:" << &str1 << endl;//123re23r addr:0x9c88dff860

    string str2(str1);
    std::cout << str2 << " addr:" << &str2 << endl;//123re23r addr:0x9c88dff840

    string str3(str1, 0, 3);
    std::cout << str3 << " addr:" << &str3 << endl;//123 addr:0x9c88dff820

    string str4(str1, 3);
    std::cout << str4 << " addr:" << &str4 << endl;//re23r addr:0x9c88dff800

    string str5(4, 'a');
    std::cout << str5 << " addr:" << &str5 << endl;//aaaa addr:0x9c88dff7e0

2 string的大小和容量

    std::cout << str1 << "'s size:" << str1.size() << endl;//123re23r's size:8
    std::cout << str1 << "'s length:" << str1.length() << endl;//123re23r's length:8

3 string的插入

    str1.push_back('h');
    str1.push_back('g');
    str1.push_back('k');
    std::cout << str1 << " addr:" << &str1 << endl;//123re23rhgk addr:0x9c88dff860

    str1.insert(str1.begin() + 2, 'p');
    std::cout << str1 << " addr:" << &str1 << endl;//12p3re23rhgk addr:0x9c88dff860

4 string拼接字符串

    str1.append("lll");
    std::cout << str1 << " addr:" << &str1 << endl;//12p3re23rhgklll addr:0x9c88dff860

    str1 += "lll";
    std::cout << str1 << " addr:" << &str1 << endl;//12p3re23rhgkllllll addr:0x9c88dff860

5 string的遍历

    auto iter = str1.begin();
    for (; iter < str1.end(); iter++)
    {
        cout << *iter;
    }
    cout << endl;//12p3re23rhgkllllll

    auto riter = str1.rbegin();
    for (; riter < str1.rend(); riter++)
    {
        cout << *riter;
    }
    cout << endl;//llllllkghr32er3p21

6 string的删除

    str1.erase(str1.begin() + 1);
    std::cout << str1 << " addr:" << &str1 << endl;//1p3re23rhgkllllll addr:0x9c88dff860
    str1.erase(str1.begin() + 1, str1.end() - 2);
    std::cout << str1 << " addr:" << &str1 << endl;//1ll addr:0x9c88dff860
    str1.erase(1, 6);
    std::cout << str1 << " addr:" << &str1 << endl;//1 addr:0x9c88dff860
    str1.clear();
    std::cout << str1 << " addr:" << &str1 << endl;

7 string的字符替换

    string s1("hello,world!");
    s1.replace(6, 5, "girl");                      // 结果:hello,girl.
    s1.replace(s1.size() - 1, 1, 1, '.');          // 结果:hello,world.
    s1.replace(s1.begin(), s1.begin() + 5, "boy"); // 结果:boy,girl.

8 string大小写转换

    for (int i = 0; i < str2.size(); i++)
    {
        str2[i] = tolower(str2[i]); // toupper(str2[i]);
    }
    std::cout << str2 << " addr:" << &str2 << endl;

9 string的查找

    string s("dog bird chicken bird cat");
    std::cout << s.find("chicken") << endl; //查找字符串的索引

    std::cout << s.find("i", 6) << endl; //从索引为6的字符开始查找

    std::cout << s.rfind("chicken") << endl; //从字符串末尾开始查找,但是索引还是从首字符开始计算的。

    std::cout << s.find_first_of("13br98") << endl; //在该字符串中查找第一个属于字符串“13br98”的字符索引

    // 6. 在该字符串中查找第一个不属于字符串s的字符,先匹配dog,然后bird匹配不到,所以打印4
    std::cout << s.find_first_not_of("hello dog 2006") << endl; // 结果是:4

    // 7. 在该字符串从后往前查找第一个属于字符串s的字符
    std::cout << s.find_last_of("13r98") << endl; // 结果是:19

    // 8. 在该字符串从后往前查找第一个不属于字符串s的字符,先匹配tac,然后空格匹配不到,所以打印21
    std::cout << s.find_last_not_of("teac") << endl; // 结果是:21

10 string的排序

    string ss = "dog bird chicken bird cat";
    std::sort(ss.begin(), ss.end()); // sort(iterator iter1, iterator iter2):对[iter1, iter2)进行排序
    std::cout << ss << endl;

11 string的分割和截取

    string ss = "dog bird chicken bird cat";
    ss = ss.substr(4, 4);
    std::cout << ss << endl; 
    
        //将字符串str以split中的字符分割
    string str("I,am,a,student; hello world!");
    string split(",; !");

    int currIndex = 0;
    int splitIndex = 0;
    while (currIndex < str.size())
    {
        splitIndex = str.find_first_of(split, currIndex);
        if (splitIndex == -1)
            splitIndex = str.size();
        if (splitIndex != currIndex)
            cout << str.substr(currIndex, splitIndex - currIndex) << endl;
        currIndex = splitIndex + 1;
    }

12 string和数值之间的转换

    int a = 10;
    float b = 20.2;

    string as = to_string(a);
    std::cout << as << endl;
    a = stoi(as, 0, 10);

    string bs = to_string(b);
    std::cout << bs << endl;
    b = stof(bs, 0);
    
    a = stoi("0xFF", 0, 16);
    std::cout << setbase(16) << "0x" << a << endl;

to_string(val):返回数值val的string表示。
stoi(s,p,b),包括其他整形:s是字符串;p是size_t指针,用来保存s中第一个非数值字符的下标,p默认为0,表示函数不保存下标;b表示转换所用的基数,默认值为10。
stof(s,p):和整形的转换方法类似,少了转换基数参数。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值