码迷,mamicode.com
首页 > 编程语言 > 详细

C++的sting类使用

时间:2021-02-19 13:29:26      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:char   user   pos   tde   for   ring   取出   转换   结束   

一:

  string作为C++常用的一个类,得熟悉它的一些常用的方法。在使用这个类之前,得加上头文件

  #include <string>

  #include <stdexcept>       //标准的异常类的库

 

二:

  (1)获取string的元素个数方法,还有访问string中的每个元素的方法

    void   test01()

    {

      string str1="hello world!good bye";
      int i;
      cout<<"str1.size:"<<str1.size()<<endl;
      cout<<"str1.length:"<<str1.length()<<endl;
      for(i=0;i<str1.size();i++)
      {
        cout<<str1[i];
      }
      cout<<endl;

      for(i=0;i<str1.size();i++)
      {
        cout<<str1.at(i);
      }
      cout<<endl;

      try
      {
        cout<<str1.at(80);
      }
      catch(out_of_range &e)
      {
        cout<<"out_of_range"<<endl;
        cout<<e.what()<<endl;
      }
      catch(...)
      {
        cout<<"越界异常"<<endl;
      }

    }

    注:str1.size()和str1.length()获取得到的值是一样的,也就是这两个方法都能得到字符串的长度;

      str1[i]和str1.at[i]都能获取得到当前下标对应的字符,但是执行 “  cout<<str1[60]<<endl;   “这样的话编译是没有问题的,但是 “  cout<<str1.at(60)<<endl;   “编译就会出现报错的情况。

    (2)字符串的拼接

      注:字符串可以使用 ”+“  或者  方法“  append ()”  来接接,例子如下:   

      void test02()
      {
        string str1="my";
        string str2="love beijing";
        string str3="good good study";
        str1=str1+str2;
        cout<<str1<<endl;
        str3.append(" day day up");
        cout<<str3<<endl;
      }

    (3)字符串的查找和替换   

      注:如下的代码str1.find("de")和str1.rfind("de")的返回值都是5,也就是结果相同,但是这两个方法的查找顺序是相反的;str1.rfind("de")是从字符串尾部开始查找的。   

      void test03()
      {
        string str1="myabcdef";
        int pos=0;
        pos=str1.find("de");
        cout<<"str1.find:"<<pos<<endl;
        pos=str1.rfind("de");
        cout<<"str1.rfind:"<<pos<<endl; //rfind和find的结果一样,只是查找的顺序刚好相反

        string str2="zhoukeliang ni hao";
        str2.replace(1,4,"66");
        cout<<"str2:"<<str2<<endl;
      }

      str2.replace(1,4,"66"),这个表示从下标1开始,后面的4个字符串替换为“66”;而下标1 为 ”h",也就是将"zhoukeliang ni hao" 改成了 ” z66eliang ni hao “

    (4)字符串的比较 

      void test04()
      {
        string str1="abc";
        string str2="efg";
        if(str1.compare(str2)==0)
        {
          cout<<"str1==str2"<<endl;
        }
        else if(str1.compare(str2)==1)
        {
          cout<<"str1>str2"<<endl;
        }
        else
        {
          cout<<"str1< < str2"<<endl;
        }
      }

      注:str1.compare(str2),当str1和str2相等时,返回的值就是0;

        当str1大于str2时,返回的值就为1;

        当str1小于str2时,返回的值小于0;

    (5)截取字符串

      string str.substr(nStart, nLength)   

      // 从str字符串nStart位置开始截取nLength个字符 , 如果nLength  大于剩余的字符则截取到str结束为止

      例子如下:      

      void test05()
      {
        string str1="abczhoukeliang";
        string str2;
        str2=str1.substr(3,4);
        cout<<"str2:"<<str2<<endl;

        string email="234358125@qq.com";
        int pos;
        pos=email.find("@");
        cout<<pos<<endl;

        string username;
        username=email.substr(0,pos);
        cout<<"username:"<<username<<endl;
      }

      注:str1.substr(3,4);截取出字符串  “ zhou ”  ;

        email.substr(0,pos);  截取出  “ 234358125 ”,也就是邮箱对应的用户名。

     (6)插入字符串  

      string  str.insert(  int p0,const string &s )

      //在字符串str的p0位置之后插入字符串s  

      void test06()
      {
        string str1="abczhoukeliang";
        str1.insert(3,"000");      //在c字符的后面插入000
        cout<<"str1:"<<str1<<endl;
      }

      输出为:abc000zhoukeliang

     (7)删除字符串

       string   str.erase(int pos,int n)          //删除str字符串里面从pos开始的n个字符

        例子如下:       

        void test07()
        {
          string str1="abc000zhoukeliang";
          str1.erase(3,3);
          cout<<"erase the result:"<<str1<<endl;
        }

        输出的结果为:abczhoukeliang

        也就是删除str1里面从字符0开始的3个字符  ” 000 ”

      (8)string类型转为char类型

        void   test08()

        {

          string str1="abczhoukeliang";

          const char *buff=str1.c_str();
          cout<<buff<<endl;

        }

      (9)const  char  *会隐式转换成string类型,但是string就不能隐式转换成const  char  *

        例子如下:    

        void fun1(string s)
        {
          cout<<"fun1:"<<s<<endl;
        }

        void fun2(char *p)
        {
          cout<<"fun2:"<<*p<<endl;
        }   

        void test09()
        {
          string str1="abczhoukeliang";
          const char *buff=str1.c_str();

          fun1(buff); //const char *隐式转换成string


          string str2(buff);

          fun2(str2) ;    //代码这里是有错误的,string不能隐式转换成const char * ,fun2(str2)这样会报错
          cout<<str2<<endl;
        }

   

    

C++的sting类使用

标签:char   user   pos   tde   for   ring   取出   转换   结束   

原文地址:https://www.cnblogs.com/Unclebigdata/p/14410327.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!