CString->std::string 例子:
CString strMfc=“test“;
std::string strStl;
strStl=strMfc.GetBuffer(0);
unicode情形下:
CStringW strw = _T("test");
CStringA stra(strw.GetBuffer(0));
strw.ReleaseBuffer();
std::string imgpath=stra.GetBuffer(0);
stra.ReleaseBuffer();
std::string->CString 例子:
CString strMfc;
std::string strStl=“test“;
strMfc=strStl.c_str();
AfxExtractSubString是截取字符串的函數,很好用,不過美中不足的地方在與它只能使用單個字符作為分割符。
但是這種情況在很多時候都行不通,如果分割符需要是兩個字符以上呢?
之前因為這個問題試了很久,也在網上搜索過。不過可惜的是,網上的大部分關於VC截取字符串的文章都是那麼同樣的幾篇,都是寫的滿復雜然後可以實現了AfxExtractSubString功能而已的,也就是只能用單個字符截取,但是標題卻寫著用字符串截取字符串,好笑!
不找了,自己寫吧。CString裡面有Find,然後再組成數組。
void Split(CString source, CStringArray& dest, CString centerision) { dest.RemoveAll(); int pos = 0; int pre_pos = 0; while( -1 != pos ){ pre_pos = pos; pos = source.Find(centerision,(pos+1)); dest.Add(source.Mid(pre_pos,(pos-pre_pos))); } }
CString source是需要截取的原字符串,
CStringArray& dest 是最終結果的數組
CString centerision 是用來做分割符的字符串
備忘:為了適用於Unicode環境,要養成使用_T()宏的習慣
1、格式化字符串
CString s;
s.Format(_T("The num is %d."), i);
2、轉為 int
轉10進制最好用_ttoi(),它在 ANSI 編碼系統中被編譯成_atoi(),而在 Unicode 編碼系統中編譯成_wtoi()。用_tcstoul()或者_tcstol()可以把字符串轉化成任意進制的(無符號/有符號)長整數。
CString hex = _T("FAB");
CString decimal = _T("4011");
ASSERT(_tcstoul(hex, 0, 16) == _ttoi(decimal));
3、轉為 char *
3.1 強制類型轉換為 LPCTSTR,不能修改字符串
LPCTSTR p = s; 或者直接 (LPCTSTR)s;
3.2 使用 GetBuffer 方法
不給 GetBuffer 傳遞參數時它使用默認值 0,意思是:“給我這個字符串的指針,我保證不加長它”。假設你想增加字符串的長度,就必須將你需要的字符空間大小(注意:是字符而不是字節,因為 CString 是以隱含方式感知 Unicode 的)傳給它。當調用 ReleaseBuffer 時,字符串的實際長度會被重新計算,然後存入 CString 對象中。
必須強調一點,在 GetBuffer 和 ReleaseBuffer 之間這個范圍,一定不能使用你要操作的這個緩沖的 CString 對象的任何方法。因為 ReleaseBuffer 被調用之前,該 CString 對象的完整性得不到保障。
LPTSTR p = s.GetBuffer(); // do something with p int m = s.GetLength(); // 可能出錯!!! s.ReleaseBuffer(); int n = s.GetLength(); // 保證正確
4、其他
4.1 分割字符串
AfxExtractSubString(CString& rString, LPCTSTR lpszFullString, int iSubString, TCHAR chSep = '/n');
CString csFullString(_T("abcd-efg-hijk-lmn"));
CString csTemp;
AfxExtractSubString(csTemp, (LPCTSTR)csFullString, 0, '-'); // 得到 abcd
AfxExtractSubString(csTemp, (LPCTSTR)csFullString, 1, '-'); // 得到 efg
AfxExtractSubString(csTemp, (LPCTSTR)csFullString, 2, '-'); // 得到 hijk
AfxExtractSubString(csTemp, (LPCTSTR)csFullString, 3, '-'); // 得到 lmn
分隔符可以隨便指定:
AfxExtractSubString(csTemp, (LPCTSTR)csFullString, 0, 'f'); // 得到 abcd-e
本文出自 “驿落黃昏” 博客,請務必保留此出處http://yiluohuanghun.blog.51cto.com/3407300/1153327