中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++實現CString和string的互相轉換

發布時間:2020-06-03 10:28:58 來源:網絡 閱讀:758 作者:驛落黃昏 欄目:移動開發

 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,然后再組成數組。

C++實現CString和string的互相轉換void Split(CString source, CStringArray& dest, CString division)
C++實現CString和string的互相轉換
{
C++實現CString和string的互相轉換     dest.RemoveAll();
C++實現CString和string的互相轉換    
int pos = 0;
C++實現CString和string的互相轉換    
int pre_pos = 0;
C++實現CString和string的互相轉換    
while-1 != pos ){
C++實現CString和string的互相轉換         pre_pos 
= pos;
C++實現CString和string的互相轉換         pos 
= source.Find(division,(pos+1));
C++實現CString和string的互相轉換         dest.Add(source.Mid(pre_pos,(pos
-pre_pos)));
C++實現CString和string的互相轉換     }

C++實現CString和string的互相轉換
C++實現CString和string的互相轉換}

CString source是需要截取的原字符串,

CStringArray& dest 是最終結果的數組

CString division 是用來做分割符的字符串

 

備忘:為了適用于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

 

 
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

武安市| 新巴尔虎右旗| 庆城县| 永春县| 建阳市| 满洲里市| 临城县| 苍梧县| 泾阳县| 察雅县| 麻栗坡县| 隆林| 红安县| 织金县| 新巴尔虎左旗| 合山市| 黑水县| 红原县| 板桥市| 东乌珠穆沁旗| 清徐县| 家居| 师宗县| 临桂县| 石狮市| 西城区| 田林县| 本溪市| 随州市| 安国市| 封丘县| 牙克石市| 中方县| 长岭县| 墨江| 金溪县| 大荔县| 平定县| 大庆市| 阳信县| 蓬莱市|