學習C++ -> string類字符串


學習C++ -> string類字符串



一、string類字符串的介紹
    在程序設計中, 字符串的使用十分頻繁, C語言類型字符串(簡稱C-串)在使用與字符串的處理上較為復雜, C++為了在程序設計中更加方便的使用字符串特新增了一種string類型的字符串。

  string類字符串為STL(Standard Template Library, 標准模板庫)中的一種自定義的數據類型, 相對於C-串來說string類型串具有一些明顯的優勢, 首先, 它在內存使用上是自動的, 需要多少, 開辟多少, 並且能夠根據字符串大小的變化自動調整所開辟的內存; 此外, string串還提供了大量的方法以便更好的完成對字符串的各種操作。
    
    



二、聲明一個string型字符串
    同普通變量一樣, string類型的字符串在使用前也需進行聲明, 並且也可以對其進行相關的初始化操作, 相關的聲明以及初始化方法如下:

        string s;                                                       //聲明一個string型字符串s
        string s(const string &str);                                    //聲明string型字符串s並用另一個string型字符串str對其進行初始化
        string s(const string &str, size_type n);                       //將字符串str中起始位置n后的字符串作為字符串s的初始值
        string s(const string &str, size_type n, size_type m);          //將字符串str位置n起, 長為m的部分的字符作為字符串s的初始值
        string s(const char *cs) ;                                      //將C-串cs作為string串s的初始值
        string s(const char *cs, size_type n);                          //將C-串cs的前n個字符作為string串s的初始值
        string s(const char *cs, size_type n, size_type m);             //將C-串cs中位置n起, 長為m的部分的字符作為字符串s的初始值
        string s(size_type num, char c);                                //初始化字符串值為num個c字符
        string s(iterator begin, iterator end);                         //將區間[begin, end]內的字符作為字符串s的初始值

       
        示例:

 1         #include<iostream>
 2 
 3         using namespace std ;
 4 
 5         int main()
 6         {
 7             char cs[] = "hello,world" ;         //聲明並初始化一個C-串
 8             string str ;                        //聲明一個string串
 9             str = "hello,world" ;               //對string串進行賦值
10             cout<<str<<endl ;
11 
12             //使用string類型初始化另一個string類型
13             string s1(str) ;        cout<<s1<<endl ;
14             string s2(str, 2) ;     cout<<s2<<endl ;
15             string s3(str, 2, 5) ;  cout<<s3<<endl ;
16 
17             //使用C-串初始化string類型串
18             string s4(cs) ;         cout<<s4<<endl ;
19             string s5(cs, 2) ;      cout<<s5<<endl ;
20             string s6(cs, 2, 5) ;   cout<<s6<<endl ;
21 
22             return 0 ;
23         }

 

 



三、字符串的輸入輸出
    除了已經學習的 ">>"、"cin.get()"和"cin.getline()"對字符串進進行輸入外, string頭文件中還定義了getline()函數用於輸入string字符串。
    getline的函數原型如下:

        istream& getline ( istream &is , string &str , char delim );        //形式一
        istream& getline ( istream& , string& );                            //形式二

 
    getline的第一個函數參數為輸入流對象; 第二個為待輸入的字符串; 第三個是可選參數, 為自定義的終止符, 當輸入到該字符時表示輸入完成, 程序只保存終止符前的輸入內容, 當省略時默認以'\n'為終止符。需要說明的是, 終止符不會保存到輸入的字符串中去。
    
    示例:

 1     #include<iostream>
 2 
 3     using namespace std ;
 4 
 5     int main()
 6     {
 7         string s;
 8         getline(cin, s) ;           //使用默認的'\n'作為終止符
 9         cout<<s<<endl ;
10 
11         getline(cin, s, '!') ;      //以'!'作為終止符
12         cout<<s<<endl;
13 
14         return 0 ;
15     }


    輸出:

    hello                ↙鍵盤輸入
    hello
    hwllo!world!         ↙鍵盤輸入
    hwllo

    Process returned 0 (0x0)   execution time : 25.375 s
    Press any key to continue.

 

 



四、string串的基本使用方法
    在string類型的字符串中, 字符串的處理得到極大的簡化, 例如原本在C-串中的復制操作, 需要借助string.h中的strcpy()函數才能完成, 而在string串中只需一個'='進行賦值就能完成。更具體的如下:
        1>. 復制

            string s1 = "hello" ;
            string s2 = s1 ;        //復制

               
        2>. 連接

            string s1 = "hello" ;
            string s2 = "world" ;
            s1 += s2 ;                //連接

              
        3>. 比較

            string s1 = "hello" ;
            string s2 = "world" ;
            if(s1 < s2)
                cout<<"s1 < s2" ;    //比較

               
        4>. 倒置串

            string s = "hello" ;
            reverse(s.begin(), s.end()) ;        //需要包含algorithm頭文件, #include<algorithm>

           
        5>. 查找串

            string s = "hello" ;
            cout<<s.find("ll") ;        //返回子串第一次出現的位置

           
        6>. 替換

            string s = "hello" ;
            s.replace(0, 2, "aaa") ;    //將字符串s中下標0-2部分字符串替換為"aaa"

 


            
            
五、string的更多方法
    由於string類型的字符串自身提供的方法太多, 這里不能一一詳述, 只選擇一些常用的來進一步說明。
        1>. 獲取字符串狀態

            s.size()                //返回字符串大小
            s.length()              //返回字符串長度
            s.max_size()            //返回字符串最大長度
            s.clear()               //清空字符串
            s.empty()               //判斷字符串是否為空

           
        2>. 修改字符串

     . append - 追加 string s = "hello" ; s.append("world") ;        //將"world"追加到s中
 ②. push_back - 追加字符到字符串 string s = "hello" ; s.push_back('!') ;        //將'!'追加字符到字符串s中
 ③. insert - 插入 string s = "hello" ; s.insert(2, "www") ;    //將字符串"www"插入到字符串s中, 插入位置為2
 ④. erase - 從字符串中擦除一些字符 string s = "hello" ; s.erase(1, 2) ;            //從下標為1處向后擦去2個字符
 ⑤. swap - 與另一字符串交換內容 string s1 = "hello" ; string s2 = "world" ; s1.swap(s2) ; //將s1與s2中的字符串進行交換

           
            等等。
            
        另外值得一提的是, 這些函數並不是只有這一種用法, 根據傳入參數不同其產生的效果也不同, 具體的原因隨着學習的不斷深入自然會揭曉。
        
        
            
--------------------


wid, 2013.01.21



上一篇: 學習C++ -> 指針初步

 


免責聲明!

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



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