在編程入門系列上一講中雞啄米說過,存放和處理字符串有兩種方式,一種是用字符數組,另一種是用C++標準類string。今天雞啄米就大概講下string類及其用法。

       C++從C語言繼承了用字符數組存放字符串的方式,并且可以使用像strcpy等系統函數來處理字符串,但是這種方式大家應該也感覺不是很方便。數據與處理數據的函數分離開也不符合面向對象的設計思想。為此C++提供了處理字符串的string類,其中封裝了字符串的一些屬性和操作字符串的函數。

       string類位于C++標準庫中。C++從C語言中繼承了一些系統函數,另外又自己定義了一些模板和類,這些模板和類邏輯上分為六種類型:輸入/輸出類、容器類與ADT(抽象數據類型)、存儲管理類、算法、錯誤處理和運行環境支持。這些大家了解下就可以了。

       C++標準庫中的類的聲明分別處于不同的頭文件中,我們要使用這些類時就要包含相應的頭文件。但是不同的編譯器頭文件也不同,VC++ 4.1以前的版本中頭文件名的形式為“*.h”,VC++ 4.2版本開始就使用符合ANSI標準的標準C++庫,可以在不同的編譯器間移植,頭文件就不再有.h擴展名了,比如,原來的iostream.h文件的新版本文件名為iostream,但C++標準庫還是保留了來自C語言的18個帶有.h擴展名的頭文件。我們在軟件開發中,可以使用以前的帶有.h擴展名的頭文件也可以使用新版本的頭文件,編譯器會自動判斷鏈接哪一個庫。但是注意,不能兩種文件混著包含,比如,包含了頭文件iostream.h,又包含了新版本頭文件string,這種情況是不允許的。

       在包含了標準C++庫中不帶.h擴展名的頭文件后,必須加入指定名字空間的語句。例如:

       #include <iostream>     // 包含iostream頭文件
       using namespace std;    // 指定名字空間std

       至于名字空間,雞啄米在博客文章中會講。這里大家只要記住這種規定就可以了。

       string類封裝了字符串的屬性和操作,這些屬性包括:字符序列、字符序列的長度、一個字符的大小等等,還提供了一些對字符串的操作:查找、分配、連接和追加等。

       雞啄米給大家介紹下string類的部分成員函數,這里寫的函數原型跟頭文件中的不完全一樣,是簡化版。具體詳細信息可以查看msdn。

       1.string類的構造函數

       string();   // 默認構造函數,創建一個長度為0的字符串
       string(const string &ths);   // 拷貝構造函數
       string(const string &ths, unsigned int pos, unsigned int n);  // 從字符串ths的位置pos(第pos+1個字符)開始取n個字符,用來初始化string類的對象。提示:第i個字符的位置為i-1
       string(const char *s, unsigned int n);  // 用指針s指向的字符串中的前n個字符初始化string類的對象
       string(unsigned int n, char c);   // 用n個重復的字符c來初始化string類的對象

雞啄米:C++編程入門系列之三十四(數組、指針和字符串:string類)

       2.string類的一些常用成員函數

       string類有很多成員函數,雞啄米就不一一講了,這里只講幾個常用的成員函數。且稱成員函數所屬對象為“本對象”,其中存放的字符串為“本字符串”。
       string append(const char *s);   // 將指針s指向的字符串添加到本字符串尾
       string assign(const char *s);   // 講指針s指向的字符串賦值給本對象
       string& insert(unsigned int p0, const char *s);  // 講s指向的字符串插入到本字符串的位置p0之前
       string substr(unsigned int pos, unsigned int n) const;  // 從本字符串的位置pos開始取n個字符構成新的字符串對象返回
       unsigned int find(const basic_string &str) const;  // 在本字符串中查找str并返回第一次出現的位置
       unsigned int length() const;  // 返回本字符串的長度
       void swap(string &str); // 交換本字符串與str的內容
       int compare(const string &str) const;  // 比較本字符串與字符串str的大小。若兩個字符串相等則返回0,若本字符串小于str,則返回負數,若本字符串大于str,則返回正數。

       兩個字符串str1和str2的比較有幾點規則:a.若str1和str2的長度相同,并且字符都相同,則str1與str2相等。b.若str1和str2的字符不完全相同,就比較第一對不相同的字符的ASCII碼,ASCII碼較小者所屬的字符串就是較小的字符串。c.若str1的長度n1小于str2的長度n2,并且str1與str2前n1個字符完全相同,則str1小于str2。

       3.string類的操作符

       操作符               舉例                       備注
           +                str1+str2              將字符串str1和str2連接成一個字符串
           =                str1=str2              將str2賦值給str1
          +=               str1+=str2           相當于str1=str1+str2
          ==               str1==str2           判斷str1與str2是否相等
          !=                str1!=str2             判斷str1與str2是否不相等
           <                str1<str2              判斷str1是否小于str2
          <=               str1<=str2           判斷str1是否小于等于str2
           >                str1>str2              判斷str1是否大于str2
          >=               str1>=str2           判斷str1是否大于等于str2
           []                 str[i]                      引用字符串str中位置為i的字符

      雞啄米最后給大家一個string類應用的例子:

      #include <string>
      #include <iostream>
      using namespace std ;
      void ShowBoolStr(int n)
      {
              cout<<(n? "True": "False")<<endl;
      }
      int main()
      {  
              string str1="www.9385095.live";
              string str2="http://jizhuomi.com";
              char s1[ ]="/software";
              char s2[ ]="/internet";
              cout<<"str1為 "<<str1<<endl;
              cout<<"str2為 "<<str2<<endl;
              cout<<"s1為 "<<s1<<endl;
              cout<<"s2為 "<<s2<<endl;
              cout<<"str1的長度:"<<str1.length()<<endl;  
              cout<<"str1<s1的結果為 ";
              ShowBoolStr(str1<s1);
              cout<<"str2>=s2的結果為 ";
              ShowBoolStr(str2>=s2);
              str1+=s1;
              cout<<"str1=str1+s1:"<<str1<<endl;
              cout<<"str1的長度:"<<str1.length()<<endl;
              return 0;
       }

       程序運行結果為:

       str1為 www.9385095.live
       str2為 http://jizhuomi.com
       s1為 /software
       s2為 /internet
       str1的長度:16
       str1<s1的結果為 False
       str2>=s2的結果為 True
       str1=str1+s1:www.9385095.live/software
       str1的長度:25

       關于string類及其用法雞啄米就講到這了。如果以后大家從事MFC開發,可能sting類會很少用到,而主要用MFC中的CString類,但操作類似。希望大家以此對標準C++庫中的類有初步的認識。有問題可以到雞啄米博客留言探討。跟您的交流將促使我們共同進步。
 

除非特別注明,雞啄米文章均為原創
轉載請標明本文地址:http://www.9385095.live/software/90.html
2011年11月23日
作者:雞啄米 分類:軟件開發 瀏覽: 評論:19