天天看點

Visual Studio/MFC程式設計入門之MFC常用類:CString類

上一節講了分割視窗的有關知識,本節開始講解MFC的一些常用類,先來說說CString類。在内容開始前為大家介紹一款MFC界面開發控件:

  • Xtreme Toolkit Pro | 免費下載下傳:是屢獲殊榮的VC界面庫,是MFC開發中最全面界面控件套包,它提供了Windows開發所需要的11種主流的Visual C++ MFC控件,包括Command Bars、Controls、Chart Pro、Calendar、Docking Pane、Property Grid、Report Control、Shortcut Bar、Syntax Edit、Skin Framework 和Task Panel。
  • BCGControlBar | 免費下載下傳:庫擁有500多個經過全面設計、測試和充分記錄的MFC擴充類。 我們的元件可以輕松地內建到您的應用程式中,并為您節省數百個開發和調試時間。

點選檢視全套MFC開發教程,助你輕松入門,還有各種實戰案例!統統限時免費開發!

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.jizhuomi.com"));  // 将常量字元串拷貝到str1
  2. CString str2(str1);       // 将str1的内容拷貝到str2

CString(LPCTSTR lpch, int nLength);

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

C++代碼

  1. CString str(_T("www.jizhuomi.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.jizhuomi.com"

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深入學習。謝謝大家耐心讀完本節教程。

轉載自:雞啄米

Visual Studio/MFC程式設計入門之MFC常用類:CString類

繼續閱讀