上一節講了分割視窗的有關知識,本節開始講解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++代碼
- CString str1(_T("www.jizhuomi.com")); // 将常量字元串拷貝到str1
- CString str2(str1); // 将str1的内容拷貝到str2
CString(LPCTSTR lpch, int nLength);
将字元串lpch中的前nLength個字元拷貝到該CString對象。例如:
C++代碼
- CString str(_T("www.jizhuomi.com"),3); // 構造的字元串對象内容為"www"
CString(TCHAR ch, int nLength = 1);
使用此函數構造的CString對象中将含有nLength個重複的ch字元。例如:
C++代碼
- CString str(_T('w'),3); // str為"www"
2. CString類的大小寫轉換及順序轉換函數
CString& MakeLower();
将字元串中的所有大寫字元轉換為小寫字元。
CString& MakeUpper();
将字元串中的所有小寫字元轉換為大寫字元。
CString& MakeReverse();
将字元串中所有字元的順序颠倒。
例如:
C++代碼
- CString str(_T("JiZhuoMi"));
- str.MakeLower(); // str為"jizhuomi"
- str.MakeUpper(); // str為"JIZHUOMI"
- str.MakeReverse(); // str為"IMOUHZIJ"
3. CString對象的連接配接
多個CString對象的連接配接可以通過重載運算符+、+=實作。例如:
C++代碼
- CString str(_T("jizhuomi")); // str内容為"jizhuomi"
- str = _T("www.") + str + _T("."); // str為"www.jizhuomi."
- 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++代碼
- CString str1 = _T("JiZhuoMi");
- CString str2 = _T("jizhuomi");
- if (str1 == str2)
- {
- // 因為str1、str2不相等,是以不執行下面的代碼
- ...
- }
- if (0 == str1.CompareNoCase(str2))
- {
- // 因為不區分大小寫比較時,CompareNoCase函數傳回0,是以執行下面的代碼
- ...
- }
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++代碼
- CString str1 = _T("jizhuomi");
- CString str2 = str1.Left(3); // str2為"jiz"
- str2 = str1.Right(2); // str2為"mi"
- str2 = str1.Mid(1,3); // str2為"izh"
- 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++代碼
- CString str = _T("jizhuomi");
- int nIndex1 = str.Find(_T("zh")); // nIndex1的值為2
- int nIndex2 = str.FindOneOf(_T("mui")); // nIndex2的值為1
- 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++代碼
- CString str = _T("jizhuomi");
- int n1 = str.Replace(_T('i'), _T('j')); // str為"jjzhuomj",n1為2
- int n2 = str.Delete(1,2); // str為"jhuomj",n2為6
- 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++代碼
- CString str;
- int a = 1;
- float b = 2.3f;
- str.Format(_T("a=%d,b=%f"), a, b); // str為"a=1,b=2.300000"
好了,關于CString類的内容就講到這裡了,用法不少,但仍不全,大家可以檢視MSDN深入學習。謝謝大家耐心讀完本節教程。
轉載自:雞啄米