轉(zhuǎn)帖|使用教程|編輯:鮑佳佳|2021-06-16 09:43:20.010|閱讀 268 次
概述:上一節(jié)中講了文檔、視圖和框架結(jié)構(gòu)中各對(duì)象之間的關(guān)系,本節(jié)主要講講在MFC中如何分割窗口。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門(mén)軟控件火熱銷(xiāo)售中 >>
上一節(jié)講了分割窗口的有關(guān)知識(shí),本節(jié)開(kāi)始講解MFC的一些常用類(lèi),先來(lái)說(shuō)說(shuō)CString類(lèi)。在內(nèi)容開(kāi)始前為大家介紹一款MFC界面開(kāi)發(fā)控件:
CString類(lèi)簡(jiǎn)介
CString類(lèi)作為MFC的常用類(lèi),當(dāng)之無(wú)愧。可以這樣說(shuō),只要是從事MFC開(kāi)發(fā),基本都會(huì)遇到使用CString類(lèi)的場(chǎng)合。因?yàn)樽址氖褂帽容^普遍,而CString類(lèi)又提供了對(duì)字符串的便捷操作,所以它給MFC開(kāi)發(fā)人員帶來(lái)了高的開(kāi)發(fā)效率,受到了開(kāi)發(fā)者的歡迎。
大家使用VS2010的話,可能會(huì)見(jiàn)到CStringT,實(shí)際上它是一個(gè)操作可變長(zhǎng)度字符串的模板類(lèi)。CStringT模板類(lèi)有三個(gè)實(shí)例:CString、CStringA和CStringW,它們分別提供對(duì)TCHAR、char和wchar_t字符類(lèi)型的字符串的操作。char類(lèi)型定義的是Ansi字符,wchar_t類(lèi)型定義的是Unicode字符,而TCHAR取決于MFC工程的屬性對(duì)話框中的Configuration Properties->General->Character Set屬性,如果此屬性為Use Multi-Byte Character Set,則TCHAR類(lèi)型定義的是Ansi字符,而如果為Use Unicode Character Set,則TCHAR類(lèi)型定義的是Unicode字符。
三個(gè)字符串類(lèi)的操作是一樣的,只是處理的字符類(lèi)型不同。本文以CString類(lèi)為講解對(duì)象。
CString類(lèi)的字符串操作
1. CString類(lèi)的構(gòu)造函數(shù)
CString類(lèi)有很多構(gòu)造函數(shù),這里只介紹幾個(gè)比較常用的:
CString(const CString& stringSrc);
將一個(gè)已經(jīng)存在的CString對(duì)象stringSrc的內(nèi)容拷貝到該CString對(duì)象。例如:
C++代碼
CString str1(_T("www.jizhuomi.com")); // 將常量字符串拷貝到str1 CString str2(str1); // 將str1的內(nèi)容拷貝到str2
CString(LPCTSTR lpch, int nLength);
將字符串lpch中的前nLength個(gè)字符拷貝到該CString對(duì)象。例如:
C++代碼
CString str(_T("www.jizhuomi.com"),3); // 構(gòu)造的字符串對(duì)象內(nèi)容為"www"
CString(TCHAR ch, int nLength = 1);
使用此函數(shù)構(gòu)造的CString對(duì)象中將含有nLength個(gè)重復(fù)的ch字符。例如:
C++代碼
CString str(_T('w'),3); // str為"www"
2. CString類(lèi)的大小寫(xiě)轉(zhuǎn)換及順序轉(zhuǎn)換函數(shù)
CString& MakeLower();
將字符串中的所有大寫(xiě)字符轉(zhuǎn)換為小寫(xiě)字符。
CString& MakeUpper();
將字符串中的所有小寫(xiě)字符轉(zhuǎn)換為大寫(xiě)字符。
CString& MakeReverse();
將字符串中所有字符的順序顛倒。
例如:
C++代碼
CString str(_T("JiZhuoMi")); str.MakeLower(); // str為"jizhuomi" str.MakeUpper(); // str為"JIZHUOMI" str.MakeReverse(); // str為"IMOUHZIJ"
3. CString對(duì)象的連接
多個(gè)CString對(duì)象的連接可以通過(guò)重載運(yùn)算符+、+=實(shí)現(xiàn)。例如:
C++代碼
CString str(_T("jizhuomi")); // str內(nèi)容為"jizhuomi" str = _T("www.") + str + _T("."); // str為"www.jizhuomi." str += _T("com"); // str為"www.jizhuomi.com"
4. CString對(duì)象的比較
CString對(duì)象的比較可以通過(guò)==、!=、<、>、<=、>=等重載運(yùn)算符實(shí)現(xiàn),也可以使用Compare和CompareNoCase成員函數(shù)實(shí)現(xiàn)。
int Compare(PCXSTR psz) const;
將該CString對(duì)象與psz字符串比較,如果相等則返回0,如果小于psz則返回值小于0,如果大于psz則返回值大于0。
int CompareNoCase(PCXSTR psz) const throw();
此函數(shù)與Compare功能類(lèi)似,只是不區(qū)分大小寫(xiě)。
例如:
C++代碼
CString str1 = _T("JiZhuoMi"); CString str2 = _T("jizhuomi"); if (str1 == str2) { // 因?yàn)閟tr1、str2不相等,所以不執(zhí)行下面的代碼 ... } if (0 == str1.CompareNoCase(str2)) { // 因?yàn)椴粎^(qū)分大小寫(xiě)比較時(shí),CompareNoCase函數(shù)返回0,所以執(zhí)行下面的代碼 ... }
5. CString對(duì)象字符串的提取操作
CString Left(int nCount) const;
提取該字符串左邊nCount個(gè)字符的子字符串,并返回一個(gè)包含這個(gè)子字符串的拷貝的CString對(duì)象。
CString Right(int nCount) const;
提取該字符串右邊nCount個(gè)字符的子字符串,并返回一個(gè)包含這個(gè)子字符串的拷貝的CString對(duì)象。
CString Mid(int iFirst,int nCount) const;
提取該字符串中以索引iFirst位置開(kāi)始的nCount個(gè)字符組成的子字符串,并返回一個(gè)包含這個(gè)子字符串的拷貝的CString對(duì)象。
CString Mid(int iFirst) const;
提取該字符串中以索引iFirst位置開(kāi)始直至字符串結(jié)尾的子字符串,并返回一個(gè)包含這個(gè)子字符串的拷貝的CString對(duì)象。
例如:
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對(duì)象字符串的查找操作
int Find(PCXSTR pszSub,int iStart=0) const throw( );
int Find(XCHAR ch,int iStart=0) const throw( );
在CString對(duì)象字符串的iStart索引位置開(kāi)始,查找子字符串pszSub或字符ch第一次出現(xiàn)的位置,如果沒(méi)有找到則返回-1。
int FindOneOf(PCXSTR pszCharSet) const throw( );
查找pszCharSet字符串中的任意字符,返回第一次出現(xiàn)的位置,找不到則返回-1。
int ReverseFind(XCHAR ch) const throw();
從字符串末尾開(kāi)始查找指定的字符ch,返回其位置,找不到則返回-1。這里要注意,盡管是從后向前查找,但是位置的索引還是要從開(kāi)始算起。
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類(lèi)對(duì)象字符串的替換與刪除
int Replace(PCXSTR pszOld,PCXSTR pszNew);
用字符串pszNew替換CString對(duì)象中的子字符串pszOld,返回替換的字符個(gè)數(shù)。
int Replace(XCHAR chOld,XCHAR chNew);
用字符chNew替換CString對(duì)象中的字符chOld,返回替換的字符個(gè)數(shù)。
int Delete(int iIndex,int nCount = 1);
從字符串中刪除iIndex位置開(kāi)始的nCount個(gè)字符,返回刪除操作后的字符串的長(zhǎng)度。
int Remove(XCHAR chRemove);
刪除字符串中的所有由chRemove指定的字符,返回刪除的字符個(gè)數(shù)。
例如:
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類(lèi)的格式化字符串方法
使用CString類(lèi)的Format成員函數(shù)可以將int、short、long、float、double等數(shù)據(jù)類(lèi)型格式化為字符串對(duì)象。
void __cdecl Format(PCXSTR pszFormat,[, argument]...);
參數(shù)pszFormat為格式控制字符串;參數(shù)argument可選,為要格式化的數(shù)據(jù),一般每個(gè)argument在pszFormat中都有對(duì)應(yīng)的表示其類(lèi)型的子字符串,int型的argument對(duì)應(yīng)的應(yīng)該是"%d",float型的應(yīng)對(duì)應(yīng)"%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"
好了,關(guān)于CString類(lèi)的內(nèi)容就講到這里了,用法不少,但仍不全,大家可以查看MSDN深入學(xué)習(xí)。謝謝大家耐心讀完本節(jié)教程。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自: