• C++ STL进阶与补充(string容器)


    String是C++字符串,本质上是一个类,类内部封装了char*,因此它是一个char*型的容器,其内部封装了很多成员方法,例如find,copy,delete,insert等。String管理char*所分配的内存,不用担心复制越界或者取值越界,由类的内部进行负责。

    1、构造函数

        String(); //创建一个空的字符串

        String(const char* s); //使用字符串s进行初始化

        String(const string& str); //使用一个string对象初始化另一个string对象

        String(int n, char c); //使用n个字符c初始化

    2、string赋值操作

        一般来说,一般使用“=”的方式进行赋值。

    1. //第一种等号方式赋值
    2. string str1;
    3. str1 = "Hello world!";
    4. cout << "str1=" << str1 << endl;
    5. //第二种等号方式赋值
    6. string str2;
    7. str2 = str1;
    8. cout << "str2=" << str2 << endl;
    9. //第一种assign函数实现
    10. string str4;
    11. str4.assign("Hello C++!");
    12. cout << "str4=" << str4<< endl;
    13. //第二种assign函数实现,实现只赋值前几个字符
    14. string str5;
    15. str5.assign("Hello C++!",5);
    16. cout << "str5=" << str5<< endl;
    17. //第三种assign函数,将一个字符串赋值给另一个字符串
    18. string str6;
    19. str6.assign(str5);
    20. cout << "str6=" << str6 << endl;

    3、string拼接操作

    功能:实现在字符串的末尾拼接字符串。

    1. //使用运算符+=
    2. string str1 = "我";
    3. str1 += "爱玩游戏";
    4. str1 += ':';
    5. cout << "str1=" << str1 << endl;
    6. string str2 = "LOL DNF";
    7. str1 += str2;
    8. cout << "str1=" << str1 << endl;
    9. //使用append函数
    10. string str3 = "I";
    11. str3.append(" love ");
    12. cout << "str3=" << str3 << endl;
    13. //append只拼接n个字符
    14. //str3.append("game abcde", 4); //拼接前四个字符
    15. str3.append("game abcde", 0,4); //拼接前四个字符,从第0个位置开始,截取4个字符
    16. cout << "str3=" << str3 << endl;

    4、string查找与替换

    查找:查找指定字符串是否存在;

    替换:在指定位置替换字符串;

    1. #include<iostream>
    2. #include"string"
    3. using namespace std;
    4. //1、查找
    5. void test01()
    6. {
    7. string str1 = "abcdefgde";
    8. int pos1=str1.find("de");
    9. cout << "pos="<<pos1 << endl; //输出3,因为索引从0开始
    10. int pos2 = str1.find("df");
    11. cout << "pos=" << pos2 << endl; //找不到则返回-1
    12. //find和rfind的区别
    13. //rfind从右往左查找,find从左往右查找
    14. int pos3 = str1.rfind("de");
    15. cout << "pos=" << pos3 << endl; //输出7
    16. }
    17. //2、替换
    18. void test02()
    19. {
    20. string str2 = "abcdefg";
    21. str2.replace(1, 3, "1111"); //一共替换了4个1进去,变成a1111efg,说明bcd替换成了1111
    22. cout << "str2=" << str2 << endl;
    23. }
    24. int main()
    25. {
    26. //test01();
    27. test02();
    28. }

    5、字符串比较

    功能:比较字符串的ASCII码,逐个挨个进行对比,如果两者相等则返0,如果前者大返回1,如果后者大返回-1。

    Compare最大的用途就是比两者是否相等。但对比谁大谁小意义不大。

    1. #include<iostream>
    2. #include"string"
    3. using namespace std;
    4. void test01()
    5. {
    6. string str1 = "xello";
    7. string str2 = "yello";
    8. if (str1.compare(str2) == 0)
    9. {
    10. cout << "两者相等" << endl;
    11. }
    12. else if (str1.compare(str2) > 0)
    13. {
    14. cout << "str1>str2" << endl;
    15. }
    16. else
    17. {
    18. cout << "str1<str2" << endl;
    19. }
    20. }
    21. int main()
    22. {
    23. test01();
    24. }

    6、string字符存取

    作用:提取字符串中的具体字符。通常可以利用字符数组的下标来提取。也可以利用函数。

    1. #include<iostream>
    2. #include"string"
    3. using namespace std;
    4. void test01()
    5. {
    6. string str1 = "hello";
    7. for (int i = 0; i < str1.size(); i++)
    8. {
    9. cout << str1[i] << " ";
    10. }
    11. cout << endl;
    12. //修改字符
    13. str1[0] = 'H';
    14. cout << str1 << endl;
    15. }
    16. int main()
    17. {
    18. test01();
    19. }

    7、string字符串插入和删除

    String字符串通过Insert函数完成插入操作,通过erase删除指定位置的字符。

    需要注意的是,下标都是从0开始算的。

    1. #include<iostream>
    2. #include"string"
    3. using namespace std;
    4. void test01()
    5. {
    6. string str = "Hello!";
    7. //插入
    8. str.insert(1, "111");//从第一个位置插入字符串
    9. cout << "str=" << str << endl; //输出H111ello
    10. //删除
    11. str.erase(1, 3);//从第1个位置起,删除3个字符
    12. cout << "str=" << str << endl; //输出Hello
    13. }
    14. int main()
    15. {
    16. test01();
    17. }

    8、子串获取

    从一段字符串中截取一段我们想要的字符串。需要明确开始截断的位置和持续的字符数。

    1. #include<iostream>
    2. #include"string"
    3. using namespace std;
    4. void test01()
    5. {
    6. string str = "Hello!";
    7. string subStr = str.substr(1, 3);
    8. cout << "subStr=" << subStr << endl;
    9. }
    10. void test02()
    11. {
    12. string email = "zhangsan@sina.com";
    13. //从邮件地址中获取用户名信息
    14. //先找@的位置
    15. int pos = email.find("@"); //位置在8号
    16. string name = email.substr(0, pos); //从0开始,截8个位置就可以了
    17. cout << "name is " << name << endl;
    18. }
    19. int main()
    20. {
    21. //test01();
    22. test02();
    23. }
  • 相关阅读:
    「摸鱼」神器来了,Python 实现人脸监测制作神器
    Unity减少发布打包文件的体积——获取精灵图片的信息限制它的大小
    企业怎么通过数字化工具来实现数字化转型?
    【Word 教程系列第 1 篇】如何去除 Word 表格中的箭头
    49位主播带货破亿,单品直播销量100万+,9月的黑马都是谁?
    354. 俄罗斯套娃信封问题
    鼠标操作和响应
    【PHY】3GPP UE能力类别的变化
    go 链表
    owl文件导入Neo4j
  • 原文地址:https://blog.csdn.net/Lao_tan/article/details/125468080