上一節雞啄米講了分割窗口的有關知識,本節開始講解MFC的一些常用類,先來說說CString類。

       CString類簡介

       CString類作為MFC的常用類,當之無愧??梢赃@樣說,只要是從事MFC開發,基本都會遇到使用CString類的場合。因為字符串的使用比較普遍,而CString類又提供了對字符串的便捷操作,所以它給MFC開發人員帶來了高的開發效率,受到了開發者的歡迎。

       大家使用VS2010的話,可能會見到CStringT,實際上它是一個操作可變長度字符串的模板類。CStringT模板類有三個實例:CString、CStringA和CStringW,它們分別提供對TCHAR、char和wchar_t字符類型的字符串的操作。char類型定義的是Ansi字符,wchar_t類型定義的是Unicode字符,而TCHAR取決于MFC工程的屬性對話框中的Configuration Properties->General->Character Set屬性,如果此屬性為Use Multi-Byte Character Set,則TCHAR類型定義的是Ansi字符,而如果為Use Unicode Character Set,則TCHAR類型定義的是Unicode字符。

       三個字符串類的操作是一樣的,只是處理的字符類型不同。雞啄米以CString類為講解對象。

       CString類的字符串操作

       1. CString類的構造函數

       CString類有很多構造函數,這里只介紹幾個比較常用的:

       CString(const CString& stringSrc);

       將一個已經存在的CString對象stringSrc的內容拷貝到該CString對象。例如:

C++代碼
  1. CString str1(_T("www.028keji.com"));  // 將常量字符串拷貝到str1      
  2. CString str2(str1);       // 將str1的內容拷貝到str2    

       CString(LPCTSTR lpch, int nLength);

       將字符串lpch中的前nLength個字符拷貝到該CString對象。例如:

C++代碼
  1. CString str(_T("www.028keji.com"),3); // 構造的字符串對象內容為"www"  

       CString(TCHAR ch, int nLength = 1);

       使用此函數構造的CString對象中將含有nLength個重復的ch字符。例如:

C++代碼
  1. CString str(_T('w'),3);  // str為"www"  

       2. CString類的大小寫轉換及順序轉換函數

       CString& MakeLower();

       將字符串中的所有大寫字符轉換為小寫字符。

       CString& MakeUpper();

       將字符串中的所有小寫字符轉換為大寫字符。

       CString& MakeReverse();

       將字符串中所有字符的順序顛倒。

       例如:

C++代碼
  1. CString str(_T("JiZhuoMi"));   
  2. str.MakeLower();   // str為"jizhuomi"   
  3. str.MakeUpper();   // str為"JIZHUOMI"   
  4. str.MakeReverse(); // str為"IMOUHZIJ"  

       3. CString對象的連接

       多個CString對象的連接可以通過重載運算符+、+=實現。例如:

C++代碼
  1. CString str(_T("jizhuomi"));      // str內容為"jizhuomi"   
  2. str = _T("www.") + str + _T("."); // str為"www.jizhuomi."   
  3. str += _T("com");                 // str為"www.028keji.com"  

VS2010/MFC編程入門之四十二(MFC常用類:CString類)

       4. CString對象的比較

       CString對象的比較可以通過==、!=、<、>、<=、>=等重載運算符實現,也可以使用Compare和CompareNoCase成員函數實現。

       int Compare(PCXSTR psz) const;

       將該CString對象與psz字符串比較,如果相等則返回0,如果小于psz則返回值小于0,如果大于psz則返回值大于0。

       int CompareNoCase(PCXSTR psz) const throw();

       此函數與Compare功能類似,只是不區分大小寫。

       例如:

C++代碼
  1. CString str1 = _T("JiZhuoMi");   
  2. CString str2 = _T("jizhuomi");   
  3. if (str1 == str2)   
  4. {   
  5.      // 因為str1、str2不相等,所以不執行下面的代碼   
  6.      ...   
  7. }   
  8. if (0 == str1.CompareNoCase(str2))   
  9. {   
  10.      // 因為不區分大小寫比較時,CompareNoCase函數返回0,所以執行下面的代碼   
  11.      ...   
  12. }  

       5. CString對象字符串的提取操作

       CString Left(int nCount) const;

       提取該字符串左邊nCount個字符的子字符串,并返回一個包含這個子字符串的拷貝的CString對象。

       CString Right(int nCount) const;

       提取該字符串右邊nCount個字符的子字符串,并返回一個包含這個子字符串的拷貝的CString對象。

       CString Mid(int iFirst,int nCount) const;

       提取該字符串中以索引iFirst位置開始的nCount個字符組成的子字符串,并返回一個包含這個子字符串的拷貝的CString對象。

       CString Mid(int iFirst) const;

       提取該字符串中以索引iFirst位置開始直至字符串結尾的子字符串,并返回一個包含這個子字符串的拷貝的CString對象。

       例如:

C++代碼
  1. CString str1 = _T("jizhuomi");   
  2. CString str2 = str1.Left(3);    // str2為"jiz"   
  3. str2 = str1.Right(2);           // str2為"mi"   
  4. str2 = str1.Mid(1,3);           // str2為"izh"   
  5. str2 = str1.Mid(5);             // str2為"omi"  

       6. CString對象字符串的查找操作

       int Find(PCXSTR pszSub,int iStart=0) const throw( );
       int Find(XCHAR ch,int iStart=0) const throw( );

       在CString對象字符串的iStart索引位置開始,查找子字符串pszSub或字符ch第一次出現的位置,如果沒有找到則返回-1。

       int FindOneOf(PCXSTR pszCharSet) const throw( );

       查找pszCharSet字符串中的任意字符,返回第一次出現的位置,找不到則返回-1。

       int ReverseFind(XCHAR ch) const throw();

       從字符串末尾開始查找指定的字符ch,返回其位置,找不到則返回-1。這里要注意,盡管是從后向前查找,但是位置的索引還是要從開始算起。

C++代碼
  1. CString str = _T("jizhuomi");   
  2. int nIndex1 = str.Find(_T("zh"));   // nIndex1的值為2   
  3. int nIndex2 = str.FindOneOf(_T("mui")); // nIndex2的值為1   
  4. int nIndex3 = str.ReverseFind(_T('i'));  // nIndex3的值為7  

       7. CString類對象字符串的替換與刪除

       int Replace(PCXSTR pszOld,PCXSTR pszNew);

       用字符串pszNew替換CString對象中的子字符串pszOld,返回替換的字符個數。

       int Replace(XCHAR chOld,XCHAR chNew);

       用字符chNew替換CString對象中的字符chOld,返回替換的字符個數。

       int Delete(int iIndex,int nCount = 1);

       從字符串中刪除iIndex位置開始的nCount個字符,返回刪除操作后的字符串的長度。

       int Remove(XCHAR chRemove);

       刪除字符串中的所有由chRemove指定的字符,返回刪除的字符個數。

       例如:

C++代碼
  1. CString str = _T("jizhuomi");   
  2. int n1 = str.Replace(_T('i'), _T('j'));  // str為"jjzhuomj",n1為2   
  3. int n2 = str.Delete(1,2);        // str為"jhuomj",n2為6   
  4. int n3 = str.Remove(_T('j'));    // str為"huom",n3為2  

       8. CString類的格式化字符串方法

       使用CString類的Format成員函數可以將int、short、long、float、double等數據類型格式化為字符串對象。

       void __cdecl Format(PCXSTR pszFormat,[, argument]...);

       參數pszFormat為格式控制字符串;參數argument可選,為要格式化的數據,一般每個argument在pszFormat中都有對應的表示其類型的子字符串,int型的argument對應的應該是"%d",float型的應對應"%f",等等。

       例如:

C++代碼
  1. CString str;   
  2. int a = 1;   
  3. float b = 2.3f;   
  4. str.Format(_T("a=%d,b=%f"), a, b);  // str為"a=1,b=2.300000"  

        好了,關于CString類的內容就講到這里了,用法不少,但仍不全,大家可以查看MSDN深入學習。雞啄米謝謝大家耐心讀完本節教程。

除非特別注明,雞啄米文章均為原創
轉載請標明本文地址:http://www.028keji.com/software/228.html
2012年8月27日
作者:雞啄米 分類:軟件開發 瀏覽: 評論:20