• STL:string容器操作


    2、string 容器

    2.1 string基本概念

    1)本质:string是c++风格的字符串,而string本质上是一个类

    2)string和char*的区别:

    char*是一个指针,string是一个类 类内部封装了char* 管理这个字符串,是一个char*型的容器。

    3)特点:

    string类内部封装了很多成员方法

    例如查找find、拷贝copy、删除delete等

    string管理char*所分配的内存,不用担心复制越界和取值越界等,由类内部进行负责。

    2.2 string构造函数

    1)string(); //创建一个空字符串

    2)string(const char*s); //使用字符串s初始化

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

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

    1. #include
    2. using namespace std;
    3. #include
    4. void test01()
    5. {
    6.     string s1;//默认构造 创建一个空字符串
    7.     cout << "s1=" << s1 << endl;
    8.     const char* str = "hello world";
    9.     string s2(str);
    10.     cout << "s2=" << s2 << endl;
    11.     string s3(s2);
    12.     cout << "s3=" << s3 << endl;
    13.     string s4(4, 'b');
    14.     cout << "s4=" << s4 << endl;
    15. }
    16. int main()
    17. {
    18.     test01();
    19.     return 0;
    20. }

    结果:

    2.3 string容器 赋值操作

    给string字符串赋值。

    1. #include
    2. using namespace std;
    3. #include
    4. /*
    5. 函数原型:
    6. string& operator= (const char* s);//char*类型字符串赋值给当前字符串
    7. string& operator=(const string& s);//把字符串s赋值给字符串
    8. string& operator=(char c);  //字符赋值给当前字符串
    9. string& assign = (const char* s);//把字符串s 赋值给当前字符串
    10. string& assign = (const char* s,int n);//把字符串s的前n个字符 赋值给当前字符串
    11. string& assign = (const string& s);//把字符串s 赋值给当前字符串
    12. string& assign = (int n,char c);//把n个字符c赋值给当前字符串
    13. */
    14. void test01()
    15. {
    16.     string s1;//默认构造 创建一个空字符串
    17.     s1 = "hello world";
    18.     cout << "s1=" << s1 << endl;
    19.     string s2;
    20.     s2 = s1;
    21.     cout << "s2=" << s2 << endl;
    22.     string s3;
    23.     s3 = 'c';
    24.     cout << "s3=" << s3 << endl;
    25.     string s4;
    26.     s4.assign("hello c++");
    27.     cout << "s4=" << s4 << endl;
    28.     string s5;
    29.     s5.assign("hello c++",5);
    30.     cout << "s5=" << s5 << endl;
    31.     string s6;
    32.     s6.assign(s5);
    33.     cout << "s6=" << s6 << endl;
    34.     string s7;
    35.     s7.assign(10,'b');
    36.     cout << "s7=" << s7 << endl;
    37. }
    38. int main()
    39. {
    40.     test01();
    41.     return 0;
    42. }

    2.4 string字符串的拼接

    1. #include
    2. using namespace std;
    3. #include
    4. /*
    5. 函数原型:
    6. string& operator+= (const char c);//重载+=操作符
    7. string& operator+=(const string& str);//重载+=操作符
    8. string& append(const char* s);//把字符串s 连接到当前字符串末尾
    9. string& append(const char* s,int n);//把字符串s 的前n个字符连接到当前字符串末尾
    10. string& append(const string &s);//同string& operator=(const string& str)
    11. string& append(const strin &s,int ops,int n);//把字符串s 中从ops开始的n个字符连接到当前字符串末尾
    12. */
    13. void test01()
    14. {
    15.     string str1 = "我";
    16.     str1 += "爱玩游戏";
    17.     cout << str1 << endl;
    18.     str1 += ':';
    19.     cout << "str1 = "<
    20.     string str2 = "LOL and DNF";
    21.     str1 += str2;
    22.     cout << "str1+=str2 = " << str1 << endl;
    23.     string str3 = "I";
    24.     str3.append(" love");
    25.     cout << "str3 = " << str3 << endl;
    26.     str3.append("game hhhhh", 4);
    27.     cout << "str3 = " << str3 << endl;
    28.     string str4;
    29.     str4.append(str3);
    30.     cout << "str4=" << str4 << endl;
    31.     str4.append(str2, 0, 3);
    32.     cout << "str4=" << str4 << endl;
    33. }
    34. int main()
    35. {
    36.     test01();
    37.     return 0;
    38. }

    输出:

    2.5 string查找和替换

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

    1. void test01()
    2. {
    3.     string str1 = "defmage";
    4.     int pos1 = str1.find("de"); //从左往右查 找到字符串返回第一个字符在字符串中的位置 未找到则返回-1
    5.     cout << "pos1=" << pos1 << endl;
    6.     int pos2 = str1.rfind("de");//从右往左查 找到字符串返回第一个字符在字符串中的位置 未找到则返回-1
    7.     cout << "pos2=" << pos2<< endl;
    8. }

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

    1. string str2 = "I am cute";
    2.     str2.replace(5, 4, "ugly");//表示从5号位置其往后四个字符全部替换为指定字符
    3. cout << "str2=" << str2 << endl;

    输出:

    2.6 字符串的比较

    比较方式:按字符的ASCII码逐个进行对比

    =:返回0  < :返回-1  >:返回1

    函数原型:

    int compare(const string &s) const;//与字符串s进行比较

    int compare(const char *s) const;

    1. //比较
    2. void test01()
    3. {
    4.     string str1 = "hello";
    5.     string str2 = "hello";
    6.     if (str1.compare(str2) == 0)
    7.     {
    8.         cout << "str1=str2" << endl;
    9.     }
    10.     else if (str1.compare(str2) > 0)
    11.     {
    12.         cout << "str1>str2" << endl;
    13.     }
    14.     else
    15.     {
    16.         cout << "str1 << endl;
    17.     }
    18. }

    2.7 string 字符的存取

    1. void test01()
    2. {
    3.     string str1 = "hello";
    4.     //通过[]访问单个字符
    5.     for (int i = 0; i < str1.size(); i++)
    6.     {
    7.         cout << str1[i] << " ";
    8.     }
    9.     cout << endl;
    10.     //通过at方式访问单个字符
    11.     for (int i = 0; i < str1.size(); i++)
    12.     {
    13.         cout << str1.at(i)<< " ";
    14.     }
    15.     cout << endl;
    16.     //修改单个字符
    17.     str1[0] = 'X';
    18.     cout <<"str1="<< str1 << endl;
    19.     str1.at(1) = 'M';
    20.     cout << "str1=" << str1 << endl;
    21. }

    2.8 字符串的插入和删除

    str.insert(1,”111”); 在1号位置插入111

    str.erase(1,3);从1号位置开始删除3个字符 

    2.9 子串的获取

    str.substr(int pos,int n) ;返回从pos开始的n个字符组成的字符串

    1. //实用操作
    2. void test01()
    3. {
    4.     string email = "zhangsan@sina.com";
    5.     //从邮件地址获取用户名
    6.     string username;
    7.     int pos = email.find("@");
    8.     username = email.substr(0, pos);
    9.     cout << "username = " << username << endl;
    10. }

    输出:

  • 相关阅读:
    你是怎么理解自动化测试的?理解自动化测试的目的和本质
    二进制搜索树(BSTs) 和AVL 树
    使用tkinter开发GUI程序1 -- 建立窗口
    Java nio 的线程通信机制线程通信Pipe
    Python的优点和缺点
    微服务架构推动精益数字化管理体系建设,构建大数据分析平台
    Java项目:JSP实现的图书管理系统
    深入理解 python 虚拟机:GIL 源码分析——天使还是魔鬼?
    Mybatis-Plus主键生成策略
    浅入深出的微前端MicroApp
  • 原文地址:https://blog.csdn.net/qq_60143666/article/details/126365275