【語法回顧】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;
 }

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM