• 【语法回顾】C++STL:string类型


       一.string对象的定义和初始化                                                                                      

       1.string标准库支持4种构造函数   

      string s1;   //默认构造函数,s1为空串

      string s1(s2);   //将s2初始化为s1的副本

      string s3("value");  //将s3初始化为一个字符串字面值副本

      string s4(n, 'c');  //将s4初始化为字符'c'的n个副本

    其他构造方式:

      string( str, n ) //被初始化为str所指向的数组的前n个元素的副本

      string( str+pos, n) //从str+pos开始n个元素的副本

      string( s2, pos) //被初始化为s2(string对象)从下标为pos处开始的字符串副本

      string( s2, pos, len) 

     

       2.string对象的读写   

      A.读取并忽略开头所有的空白字符(如空格,换行符,制表符)

          读取字符直至再次遇到空白字符时,读取终止;(对单词的读取)

    int main()
    {
         string s1;
         while( cin >> s1 )
                 cout << s1 << endl;
        return 0;
    }
      
    

      B.用getline()读取整行文本,getline()并不忽略行开头的换行符,只要读取到换行符,果断停止读入。

                line不包含换行符,如果需要逐行输出必须自己添加换行符。(getline()读取的string对象中不存储换行符)

    int main()
    {
        string line;
        while( getline(cin, line))
              cout << line << endl;
       return 0;
    }
    

       二.string对象的操作                                                                                                     

       1.简单操作罗列   

      s.empty()  // 如果s为空串,返回true,否则返回false

      s.size()  // 返回s 中字符的个数   

      s[n]  // 返回s中位置为n的字符,位置从0开始计数

      s1 + s2 // 把s1,s2链接成一个新字符串,返回新生成的字符串

      s1 = s2 //  把s1内容替换为s2的副本

      v1 == v2  //  比较v1和v2的内容,返回true,false

      > , <, !=, <= 和 >=  

      2.常用重点操作  

     A.插入

         s.insert(pos, s2) //在下标pos之前 插入 s2的副本

       s.insert(pos, s2, pos2, len)  //在下标pos之前 插入 s2从pos2下标开始len长度的字符串副本

    B.完全替换s

       s.assign(s2) //用s2的副本 替换s

      s.assign(s2, pos2, len) //用s2中从pos2开始len长度的字符串 替换s

    C.删除

       s.erase(pos, len) // 删 除从下标pos开始len长度个字符

    D.返回子串(返回string的对象)

      s.substr(pos, n) // 返回从下标pos开始len长度的子串

      s.substr(pos) // 从s[pos]开始到结尾

    E.append和replace

      s.append(str); //将str添加在s之后 

      s.replace(pos, len, str); // 将s的pos下标开始len长度的字符串由str替换   s.replace(1, 5, str) = s.erase(1, 5) + s.insert(1, str)

    F.string类型的查找操作

      string类型查找操作全部都返回string::size_type类型的值,以下标形式查找匹配所发生的位置;或者返回一个名为string::npos的特殊值,表示没有匹配。

      s.find(str) //查找子串str

      s.find(str, pos) // 从下标pos开始查找

      s.rfind(str) //反向查找,从后往前找

    string s("asdfasdfwqe");
    string::size_type pos1 = s.find("s"); //pos1的值为1
    pos1 = s.rfind("s");  // pos1的值为5
    pos1 = s.find("w");  // pos1的值变为npos

       3.注意事项   

    B.用string::size_type类型来接收s.size()的返回值(unsigned),它为的是确保库类型使用的机器无关性,不要把size()的返回值赋给一个int;

    C.关系操作符比较时空字符小于任何字符;

    D.string对象和字符串字面值的链接:每个+操作符的左右操作数必须至少有一个是string类型的

    E.从string对象获取字符

      string对象的下表从0开始,到 string[s.size()-1]终止;

    string str("some string");
    for( string::size_type ix = 0; ix != str.size(); ix++)
    {
       cout << str[ix] << endl;
    }
    

      

       三.string与数值的相互转换                                           

    View Code 
     #include<iostream>
     #include<string>
     #include<sstream>
     #include<cstdio>
     
     using namespace std;
     
     //c++ 方法 把数转换为string
     string converToString(double x)
     {
         ostringstream o;
         if( o << x)
         {
             // str()没有'\0' c_str有
             return o.str();
         }
         return "error";
     }
     
     double converFromString(const string &s)
     {
         istringstream i(s);
         double x;
         if( i >> x)
         {
             return x;
         }
         //if error
         return 0.0;
     }
     int main()
     {
         char b[100];
         string s1;
     
         //c语言方法
         sprintf(b,"%d",1987);
         s1 = b;
         cout << s1 << endl;
     
         string s2 = converToString(1954);
         cout << s2 << endl;
     
         string s3 = "202";
         int c = converFromString(s3);
         cout << c << endl;
     
         string s4 = "casacsa6";
         int d = converFromString(s4);
         cout << d << endl;
     
         string s5 = "21abf4";
         int f = converFromString(s5);
         cout << f << endl;
     
         return 0;
     }
    

      

  • 相关阅读:
    细节决定成败
    关于结构体大小一篇很详细的文章
    Mysql Innodb cluster集群搭建
    Oracle:imp导入dmp文件
    alert弹出窗口,点击确认后关闭页面
    CAS总结之Ticket篇
    web.xml文件的作用
    单点登陆(SSO)
    session和cookie的区别
    oracle问题之数据库恢复(三)
  • 原文地址:https://www.cnblogs.com/VortexPiggy/p/2585627.html
Copyright © 2020-2023  润新知