CString常用函式用法
阿新 • • 發佈:2019-01-03
CString給MFC程式設計師帶來了在那個年代不敢奢望的功能,甚至在VS2005剛釋出的時候,為了應對預設UNICODE的問題,我常常使用CString避免顯式的寬字元轉換。
在現在,好用的CString也是ATL的一部分了。其實ATL裡的CString和MFC裡的是同一個東東,如果在MFC中已經很熟悉CString了,就沒有必要更多的研究了。
下面是我自己覺得常用的幾個操作,當然有些我以前沒用過的覺得相見恨晚的東東,我也寫進去了。
- //A.建構函式,CStringT提供了19個建構函式,其中一個旨在.NET平臺託管C++工程中才被編譯,我只寫幾個我覺得常用的
-
//1.預設建構函式,生成一個""字串
- CString cstr1;
- //2.拷貝建構函式
- CString cstr2(cstr1);
- //3.從LPCSTR構造
- LPCSTR myCStr = "Hello CString";
- CString cstr3(myCStr);
- //4.從LPCWSTR構造
- LPCWSTR myCWStr = L"Hello CString";
- CString cstr4(myCWStr);
- //5.指定n個c字元構造
- char mycharacter = 'x';
- CString cstr5(mycharacter,10); //構造10個x的字串
- //6.從指定n個w字元構造
-
wchar_t mywcharacter = '測'
- CString cstr6(mywcharacter,5);
- //7.從unsigned char(也就是MBCS)構造
- unsigned char* pMbcs = NULL;
- CString cstr7(pMbcs);
- //8.從VARIANT構造
- BSTR bstr = SysAllocString(L"Hello World");
- VARIANT var;
- var.bstrVal = bstr; //var.bstrVal = L"Hello World"cstr8的字元資訊不對。
- var.vt = VT_BSTR;
-
SysFreeString(bstr);
- CString cstr8(var);
- //B.CString提供了8個賦值操作符,我只寫我覺得幾個常用的
- //1.CString到CString
- cstr8 = cstr7;
- //2.c char到CString
- cstr8 = mycharacter;
- //3.w char到CString
- cstr8 = mywcharacter;
- //4.uc char到CString
- cstr8 = pMbcs;
- //5.VARIANT到CString
- cstr8 = var;
- //C.字串連線,我只寫幾個我覺得常用的
- //1.operator+ char
- cstr8 += mycharacter;
- //2.operator+ unsigned char
- cstr8 += unsigned char('c');
- //3.operator+ wchar_t
- cstr8 += mywcharacter;
- //4.operator+ VARIANT
- cstr8 += var;
- //CString + CString
- cstr8 += cstr7;
- //D.大小寫轉換
- cstr8.MakeUpper(); //轉大寫
- cstr8.MakeLower(); //轉小寫
- //E.CString定義了比較完整的比較操作,這有==、!=、<等等
- //F.操作
- //1.查詢
- cstr8.Find('o'); //查詢第一個'o'
- cstr8.Find('o',5); //從左起第5個查
- cstr8.FindOneOf(L"aeiou"); //查詢集合中的任一個
- cstr8.ReverseFind('o'); //反向查詢
- //2.裁剪
- cstr8.Trim(); //裁剪開始+末尾空格
- cstr8.Trim('o'); //裁剪左右'o'
- cstr8.Trim(L"aeiou"); //裁剪左右任何在集合中的字元
- cstr8.TrimLeft();
- cstr8.TrimLeft('o');
- cstr8.TrimLeft(L"aeiou");
- cstr8.TrimRight();
- cstr8.TrimRight('o');
- cstr8.TrimRight(L"aeiou");
- //3.取回目標字串中被指定字串包含的子串
- cstr8 = L"hello worldhello world";
- cstr7 = cstr8.SpanIncluding(L"mhellohaha");
- //4.取回原串,直到目標串中的任意一個字元出現
- cstr7 = cstr8.SpanExcluding(L"aiuw");
- //5.Inert
- cstr8.Insert(5,L"haha"); //指定位置插入字串
- cstr8.Insert(6,'h'); //指定位置插入字元
- //6.Delete、Remove
- cstr8.Delete(5,2); //從指定位置(5)刪除若干個(2)字元
- cstr8.Remove('o'); //移除所有'o'
- //7.Replace
- cstr8.Replace('o','a'); //把'o'替換為'a'
- cstr8.Replace(L"haha",L"toto"); //字串替換
- //9.提取子串
- CString cstrRet;
- cstrRet = cstr8.Left(5); //提取最左n個字元
- cstrRet = cstr8.Mid(10); //從第n個字元到結尾
- cstrRet = cstr8.Mid(10,15); //提取指定區間字串
- cstrRet = cstr8.Right(11); //最右邊n個字元
- //10.反轉
- cstr8.MakeReverse();
- //11.以特定分隔符提取
- int refn = 0;
- cstrRet = cstr8.Tokenize(L"aeiou",refn); //可以使用refn遞迴找到所有被分割的子串
- //12.載入dll或exe中的字串資源
- cstr8.LoadString(100); //100為資源id,還有其他過載,略去
- //13.獲取環境變數
- cstr8.GetEnvironmentVariable(L"windir");
- //14.格式化
- cstr8.Format(L"haha,now is%d with %s",100,L"old"); //format string 也可以是資源id
- //G.與BSTR的互動
- BSTR bstr1 = cstr8.AllocSysString();
- BSTR bstr2 = cstr8.SetSysString(&bstr1);
- SysFreeString(bstr2);