• (C++)string类及其函数


     愿所有美好如期而遇


    标准库中的string类

    string是对类模板实例化出的类型的重命名,也就是说string就是basic_string这个类型。

    string是表示字符串的字符串类

    该类接口与常规类的接口基本相同,再添加了一些专门用来操作string的常规操作。

    在使用string类时,需要使用using namespace std,或者部分展开。而且我们最好包含的头文件,不是每个编译器都在里包含了的声明。(尽管我的编译器实现了)

    string类的常用接口

    string()                               无参构造,结果就是空字符串

    string(const char* s)        用常量字符串构造

    string(const string& s)     拷贝构造

    string(size_t  n,char ch)   用n个字符ch构造

     

    string类对象的容量操作

    size/length  返回字符串的有效长度,\0是标识符,不属于有效字符

    empty          检测字符串是否位空串,是返回true,否返回false

    clear            清空字符串有效字符  

    string类对象的访问以及遍历操作

    operator[]      运算符重载

    begin+end    begin获取第一个字符的迭代器,end获取最后一个有效字符的下一个位置的迭代器。

    1. #include <iostream>
    2. #include <string>
    3. using namespace std;
    4. int main()
    5. {
    6. string s("I love you");
    7. for (int i = 0; i < s.size(); i++)
    8. {
    9. cout << s[i];
    10. }
    11. cout << endl;
    12. //底层是迭代器
    13. for (auto e : s)
    14. {
    15. cout << e;
    16. }
    17. cout << endl;
    18. string::iterator sit = s.begin();
    19. while (sit != s.end())
    20. {
    21. cout << *sit++;
    22. }
    23. cout << endl;
    24. return 0;
    25. }

     

    四个迭代器

    iterator                              

    const_terator

    reverse_iterator

    const_reverse_iterator

    1. #include <iostream>
    2. using namespace std;
    3. int main()
    4. {
    5. //iterator
    6. string s1("ai");
    7. string::iterator it1 = s1.begin();
    8. while (it1 != s1.end())
    9. {
    10. cout << *it1++;
    11. }
    12. cout << endl;
    13. //const iterator
    14. const string s2("const ai");
    15. string::const_iterator it2 = s2.begin();
    16. while (it2 != s2.end())
    17. {
    18. cout << *it2++;
    19. }
    20. cout << endl;
    21. //reverse iterator
    22. string s3("I love you");
    23. string::reverse_iterator it3 = s3.rbegin();
    24. while (it3 != s3.rend())
    25. {
    26. cout << *it3++;
    27. }
    28. cout << endl;
    29. //const_reverse_iterator
    30. string s4("hope");
    31. string::const_reverse_iterator it4 = s4.rbegin();
    32. while(it4 != s4.rend())
    33. {
    34. cout << *it4++;
    35. }
    36. cout << endl;
    37. return 0;
    38. }

    插入和删除

    insert 可以从任意位置插入字符或者字符串

    earse  可以从任意位置删除字符或者字符串

    1. int main()
    2. {
    3. string s = "haha";
    4. s.insert(0, "hello ");
    5. cout << s << endl;
    6. s.insert(0, 1, '?');
    7. cout << s << endl;
    8. s.insert(s.size(), 1, '?');
    9. cout << s << endl;
    10. string s1;
    11. s1.resize(16,'?');
    12. s.insert(s.size() / 2, s1);
    13. cout << s << endl;
    14. //迭代器
    15. s.insert(s.begin(), 'h');
    16. s.insert(s.begin(), '?');
    17. cout << s << endl;
    18. return 0;
    19. }

    1. int main()
    2. {
    3. string s = "abcdefghijklmnopqrstuvwxyz";
    4. cout << s << endl;
    5. //0位置开始删除1个字符
    6. s.erase(0, 1);
    7. cout << s << endl;
    8. //删除区间字符
    9. s.erase(s.end() - 3,s.end());
    10. cout << s << endl;
    11. //删除单个字符
    12. s.erase(s.end() - 3);
    13. cout << s << endl;
    14. //缺省,全部删除
    15. s.erase(0);
    16. cout << s << "NULL" << endl;
    17. return 0;
    18. }

  • 相关阅读:
    Android 13.0 进入recovery模式(等待用户选择recovery模式界面)进入自动恢复出厂设置模式
    【IoT毕设.下】STM32+机智云AIoT+实验室安全监控系统
    (算法)存在重复元素I——<哈希表>
    安装ubuntu后第一件事
    开箱即用的流媒体管理系统wvp-GB28181-pro 基于ZLMediaKit
    【步态识别】GaitMPL
    计算机毕业设计JAVA大学生兼职平台mybatis+源码+调试部署+系统+数据库+lw
    Java8新特性
    号称超级增程电动,领克07EM-P带来技术变革?
    边缘计算网关的用途及其使用方法-天拓四方
  • 原文地址:https://blog.csdn.net/m0_74824254/article/details/134431352