【C++】String 容器

  • Post author:
  • Post category:其他


【C++】String容器

  1. string 和 char*的区别

    1. char * 是一个指针

    2. string 是一个类,其内部封装好了

      char*

      ,是一个

      char*

      型的容器

  2. 特点

    1. string 类内部封装了很多方法

      例如:查找find、拷贝copy、删除delete、替换replace、插入insert

    2. string 管理char*所分配的内存,不用担心复制越界和取值越界等问题

  3. string 容器的构造方法

    1. 默认构造

      string s1;
    2. 用字符串s初始化

      const char * s = "hello world!";
      string s2(s);
      cout<<"s2 = "<<s2<<endl;
    3. 通过复制一个string对象来初始化

      string s3(s2);
      cout<<"s3 = "<<s3<<endl;
    4. 用 n 个指定字符来初始化

      string s4(10,'a');
      cout<<"s4 = "<<s4<<endl;
  4. string 容器的赋值方法

    1. = 方法

      string str1;
      str1 = "hello world!";
      cout<<"str1 = "<<str1<<endl;
      ​
      string str2;
      str2 = str1;
      cout<<"str2 = "<<str2<<endl;
      ​
      string str3;
      str3 = 'a';
      cout<<"str3 = "<<str3<<endl;
    2. assign()函数方法

      string str4;
      str4.assign("hello c++");
      cout<<"str4 = "<<str4<<endl;
      ​
      //取字符串 str 的前 n 个字符
      string str5;
      str5.assign("hello c++",7);
      cout<<"str5 = "<<str5<<endl;
      ​
      string str6;
      str6.assign(str5);
      cout<<"str6 = "<<str6<<endl;
      ​
      string str7;
      str7.assign(5,'x');
      cout<<"str7 = "<<str7<<endl;
  5. string 容器的字符串拼接

    1. 
      

      += 方法

      //string 容器的字符串拼接
      // += 方法
      string str1 = "hello";
      str1 += " world";//可以直接加一个字符串
      cout<<"str1 = "<<str1<<endl;
      
      str1 += '!';//可以直接加一个字符
      cout<<"str1 = "<<str1<<endl;
      
      string str2 = "233";
      str1 += str2;
      cout<<"str1 = "<<str1<<endl;
    2. appen()函数方法

      //append()函数方法
      string str3 = "hello";
      str3.append(" world");
      cout<<"str3 = "<<str3<<endl;
      
      str3.append("123456",3);//只拼接前3个字符串
      cout<<"str3 = "<<str3<<endl;
      
      string str4 = "str4";
      str4.append(str2);
      cout<<"str4 = "<<str4<<endl;
      //截取str3的字符,范围是从下标为0(位序为1)的字符开始截取5个字符
      str4.append(str3,0,5);
      cout<<"str4 = "<<str4<<endl;
      //也可以直接将字符本身放进函数中
      str4.append("hello world",0,5);
      cout<<"str4 = "<<str4<<endl;

  6. string 容器的字符串查找

    1. find()函数:

      1. 只有一个参数,那就是待查找的目标字符串

      2. 返回值是 目标字符串 第一次出现的

        下标位置

    2. rfind()函数

      1. 参数与find()函数相同

      2. 与find()函数的区别:

        1. find()函数是在原字符串中


          从左到右


          依次查找

        2. rfind()函数实在原字符串在


          从右到左


          依次查找

    3. 代码示例:

      void test04()
      {
          //string 容器的字符串的查找
          string str1 = "abcdefgdede";
          int pos1 = str1.find("de");
          if(pos1 == -1)
          {
              //若未找到目标字符串,则返回 -1 
              cout<<"未找到字符串"<<endl;
          }
          else
          {
              //pos返回的是从左往右找的过程中第一次遇到 目标字符串的 第一个字符的下标位置(不是位序)
              cout<<"找到字符串,pos1 = "<<pos1<<endl;
          }
          int pos2 = str1.rfind("de");
          if(pos2 == -1)
          {
              cout<<"未找到字符串"<<endl;
          }
          else
          {
              //rfind()函数于find()函数几乎相同,只是rfind()函数是从右往左搜索,而find()函数是从左往右搜索
              cout<<"找到字符串,pos2 = "<<pos2<<endl;
          }
      }
  7. string 容器的字符串替换

    1. replace()函数

      1. 共有三个参数

        1. 第一个参数:开始位置的下标

        2. 第二个参数:替换掉原字符串的长度

        3. 第三个参数:用来替换的字符串

    2. 代码示例:

      void test05()
      {
          //string 容器的字符串的替换
          string str1 = "abcdefgdedee";
          //replace()函数
          //第一个参数是从该 下标 开始
          //第二个参数是替换原字符串的多少个字符
          //第三个参数是 拿什么字符串替换
          str1.replace(1,3,"111111111");
          cout<<"str1 = "<<str1<<endl;
      }
  8. string 容器的字符串比较

    1. compare()函数

      1. 只有一个参数,那就是待比较的字符串

      2. 其结果有三种情况


        1. =

          返回 0


        2. >

          返回 1 (即原字符串大于待比较的字符串)


        3. <

          返回 -1

    2. 代码示例:

      void test06()
      {
          //string 容器的字符串比较
          //比较方式 按字符的 ASCII码值比较
          // = 返回 0
          // > 返回 1
          // < 返回 -1
          string str1 = "Hello";
          string str2 = "hello";
          
          int ret = str1.compare(str2);
          if(ret == 0)
          {
              //通常使用字符串比较只用比较其是否相等即可,至于谁大谁小意义不大
              cout<<"str1 == str2"<<endl;
          }
          else
          {
              cout<<"str1 != str2"<<endl;
          }
      }
  9. string 容器的字符串存取

    1. 用 [ ] 方法

      1. 直接获取指定位置的字符

    2. 用 at() 函数

      1. 只有一个参数,那就是待获取的位置

    3. 代码示例

      void test07()
      {
          //string 容器的字符(串)存取
          string str1 = "algorithm";
          
          //用 [] 方法
          for(int i=0;i<str1.size();i++)
          {
              cout<<str1[i]<< " ";
          }
          cout<<endl;
      ​
          //用 at() 函数方法
          for(int i=0;i<str1.size();i++)
          {
              cout<<str1.at(i)<<" ";
          }
          cout<<endl;
      ​
          //xlgorithm
          str1.at(0) = 'x';
          cout<<str1<<endl;
      ​
          //xxgorithm
          str1[1] = 'x';
          cout<<str1<<endl;
      }
  10. string 容器的字符串的插入和删除

    1. 插入

      1. insert()函数

        1. 有两个参数

          1. 第一个参数:原字符串待插入的下标位置

          2. 第二个参数:插入的字符串

    2. 删除

      1. erase()函数

        1. 两个参数

          1. 第一个参数:原字符串待删除的下标位置

          2. 第二个参数:删除的字符个数

    3. 代码示例:

      void test08()
      {
          //string 容器的元素的插入和删除
          string str1 = "algorithm";
          str1.insert(1,"1111");
          //在下标 1 后插入指定字符串
          cout<<"插入后,str1 = "<<str1<<endl;
      ​
          str1.erase(1,4);
          //在下标 1 后删除 4 个字符
          cout<<"删除后,str1 = "<<str1<<endl;
      ​
          //*******************************
          //插入和删除的起始下标都是从 0 开始
          //*******************************
      }
  11. string 容器的字符串取子串

    1. substr()函数

      1. 两个参数

        1. 第一个参数:原字符串中 取子串的起始位置的下标

        2. 第二个参数:截取子串的长度

    2. 代码示例:

      void test09()
      {
          //string 容器截取字串substring
          string str1 = "algorithm";
          //第一个参数是起始位置的下标
          //第二个参数是截取 子串的长度
          string substr1 = str1.substr(0,6);
          cout<<"substr1 = "<<substr1<<endl;
          //截取后对原字符串无影响
          cout<<"str1 = "<<str1<<endl;
      ​
          //实际应用示例
          string email = "string@sina.com";
          int pos = email.find("@");
          string userName = email.substr(0,pos);
          cout<<"userName:"<<userName<<endl;
      }



版权声明:本文为weixin_55717136原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。