VC++ MFC CString類 總結(jié)

收集自我來喬23


CString 是編程中一種非常有用的數(shù)據(jù)類型鬼佣,它是MFC中的一個(gè)類瓤的,很大程度上簡化了MFC中的許多字符串的操作脆烟。

CString位于頭文件afx.h中,即:include <afx.h>

①润脸、CString 類對象的初始化:

CString str;

CString str1(_T("abc"));

CString str2 = _T("defg");

TCHAR szBuf[] = _T("kkk");

CString str3(szBuf);

CString str4 = szBuf;

TCHAR *p = _T("1k2");

//TCHAR * 轉(zhuǎn)換為 CString

CString str5(p);

CString str6 = p;

CString str7(str1);

CString str8 = str7;

②、字符串基本操作:

//長度:GetLength();

CString str(_T("abc"));

int len = str.GetLength(); //len == 3

 

//是否為空他去,即不含字符:IsEmpty();

//清空字符串:Empty();

CString str(_T("abc"));

BOOL mEmpty = str.IsEmpty(); //mEmpty == FALSE

str.Empty();

mEmpty = str.IsEmpty(); //mEmpty == TRUE

 

//轉(zhuǎn)換大小寫:MakeUpper毙驯、MakeLower

// 轉(zhuǎn)換順序:MakeReverse

CString str(_T("Abc"));

str.MakeUpper(); //str == ABC

str.MakeLower(); //str == abc

str.MakeReverse(); //str == cba

 

//字符串的連接:+、+=

CString str(_T("abc"));

str = _T("de") + str + _T("kp"); //str == deabckp

str += _T("123"); //str == deabckp123

TCHAR szBuf[] = _T("789");

str += szBuf; //str == deabckp123789

 

// 字符串的比較:==灾测、!=爆价、(<、>媳搪、<=铭段、>= 不常用)、Compare(區(qū)分大小寫)秦爆、CompareNoCase(不區(qū)分大小寫)

CString str1(_T("abc"));

CString str2 = _T("aBc");

if (str1 == str2){

MessageBox(_T("str1 等于 str2"));

}else{

MessageBox(_T("str1 不等于 str2"));

}

③序愚、字符串的查找:
Find、ReverseFind等限、FindOneOf 三個(gè)函數(shù)可以實(shí)現(xiàn)字符串的查找操作

Find 從指定位置開始查找指定的字符或者字符串爸吮,返回其位置,找不到返回 -1望门;

舉例:

CString str(_T("abcdefg"));

int idx = str.Find(_T("cde"), 0); //idx 的值為2;

ReverseFind 從字符串末尾開始查找指定的字符形娇,返回其位置,找不到返回 -1怒允,雖然是從后向前查找埂软,但是位置為從開始算起;

CString str(_T("abcdefg"));

int idx = str.ReverseFind('e'); //idx 的值為4;

FindOneOf 查找參數(shù)中給定字符串中的任意字符纫事,返回第一次出現(xiàn)的位置勘畔,找不到返回 -1;

CString str(_T("abcabcd"));

int idx = str.FindOneOf(_T("cbd")); //idx 的值為1;

④丽惶、字符串的替換與刪除:
Replace 替換 CString 對象中的指定的字符或者字符串炫七,返回替換的個(gè)數(shù),無匹配字符返回 0钾唬;

CString str(_T("abcdabc"));

int num = str.Replace('b', 'k'); //str == akcdakc, num == 2

 

CString str(_T("abcdabc"));

int num = str.Replace(_T("bc"), _T("kw")); //str == akwdakw, num == 2


//Remove 刪除 CString 對象中的指定字符万哪,返回刪除字符的個(gè)數(shù)侠驯,有多個(gè)時(shí)都會刪除

CString str(_T("abcdabcb"));

int num = str.Remove('b'); //str == acdac, num == 3


//Delete 刪除 CString 對象中的指定位置的字符,返回處理后的字符串長度

CString str(_T("abcd"));

int num = str.Delete(1, 3); //str == a, num == 1

⑤奕巍、字符串的提纫鞑摺:
Left、Mid的止、Right 三個(gè)函數(shù)分別實(shí)現(xiàn)從 CString 對象的 左檩坚、中、右 進(jìn)行字符串的提取操作诅福;

CString str(_T("abcd"));

CString strResult = str.Left(2); //strResult == ab

strResult = str.Mid(1); //strResult == bcd

strResult = str.Mid(0, 2); //strResult == ab

strResult = str.Right(2); //strResult == cd

⑥匾委、單個(gè)字符的修改:
GetAt、SetAt 可以獲取與修改 CString 對象中的單個(gè) TCHAR 類型字符氓润;

操作符也可以獲取 CString 對象中的單個(gè)字符赂乐,但為只讀的,不能進(jìn)行修改咖气;

CString str(_T("abcd"));

str.SetAt(0, 'k'); //str == kbck

TCHAR ch = str.GetAt(2); //ch == c

⑦挨措、其他類型與 CString 對象類型的轉(zhuǎn)換:
● 格式化字符串:Format 方法,實(shí)現(xiàn)從 int采章、long 等數(shù)值類型运嗜、TCHAR、TCHAR * 等類型向 CString 類型的轉(zhuǎn)換悯舟;

int num = 6;

CString str;

str.Format(_T("%d"), num);

● CString 類型向 int 等數(shù)值類型担租、TCHAR * 類型的轉(zhuǎn)換:

TCHAR *pszBuf = str.GetBuffer();

str.ReleaseBuffer();

 

TCHAR *p = (LPTSTR)(LPCTSTR)str;

 

CString str1(_T("123"));

int num = _ttoi(str1);

⑧、CString 對象的 Ansi 與 Unicode 轉(zhuǎn)換:
大家可以直接使用上節(jié)課給大家講解的方法抵怎,此外這里給大家介紹一種從 Ansi 轉(zhuǎn)換到 Unicode 的隱含方法:

//當(dāng)前工程環(huán)境為Unicode

CString str;

str = "abc";

char *p = "defg";

str = p;

⑨奋救、 CString 對象字符串所占用的字節(jié)數(shù):

CString str = _T("abc");

錯(cuò)誤的求法sizeof(CString)sizeof(str)

正確的求法str.GetLength()*sizeof(TCHAR)

⑩反惕、當(dāng)作為 TCHAR * 類型傳參時(shí)
確保申請了足夠用的空間尝艘,比如使用 GetModuleFileName 函數(shù);


希望大家能把自己的所學(xué)和他人一起分享姿染,不要去鄙視別人索取時(shí)的貪婪背亥,因?yàn)樽顟?yīng)該被鄙視的是不肯分享時(shí)的吝嗇

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市悬赏,隨后出現(xiàn)的幾起案子狡汉,更是在濱河造成了極大的恐慌,老刑警劉巖闽颇,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件盾戴,死亡現(xiàn)場離奇詭異,居然都是意外死亡兵多,警方通過查閱死者的電腦和手機(jī)尖啡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進(jìn)店門橄仆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人衅斩,你說我怎么就攤上這事盆顾。” “怎么了畏梆?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵椎扬,是天一觀的道長。 經(jīng)常有香客問我具温,道長,這世上最難降的妖魔是什么筐赔? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任铣猩,我火速辦了婚禮,結(jié)果婚禮上茴丰,老公的妹妹穿的比我還像新娘达皿。我一直安慰自己,他們只是感情好贿肩,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布峦椰。 她就那樣靜靜地躺著,像睡著了一般汰规。 火紅的嫁衣襯著肌膚如雪汤功。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天溜哮,我揣著相機(jī)與錄音滔金,去河邊找鬼。 笑死茂嗓,一個(gè)胖子當(dāng)著我的面吹牛餐茵,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播述吸,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼忿族,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蝌矛?” 一聲冷哼從身側(cè)響起道批,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎朴读,沒想到半個(gè)月后屹徘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡衅金,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年噪伊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了簿煌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,096評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡鉴吹,死狀恐怖姨伟,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情豆励,我是刑警寧澤夺荒,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站良蒸,受9級特大地震影響技扼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜嫩痰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一剿吻、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧串纺,春花似錦丽旅、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至祷蝌,卻和暖如春茅撞,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背巨朦。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工乡翅, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人罪郊。 一個(gè)月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓蠕蚜,卻偏偏與公主長得像,于是被迫代替她去往敵國和親悔橄。 傳聞我的和親對象是個(gè)殘疾皇子靶累,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評論 2 355