CString 字符串轉化和分割


1、格式化字符串

CString s;
s.Format(_T("The num is %d."), i);相當於sprintf()

 

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

 

4.2 字符串分割

利用CString的Find方法,然后再組成數組。

函數:

Split(CString source; CStringArray& dest ; CString division )

參數含義:

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

CStringArray& dest ---------最終結果的數組

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

void Split(CString source, CStringArray& dest, CString division)
{
    dest.RemoveAll();
    int pos = 0;
    int pre_pos = 0;
    while( -1 != pos ){
        pre_pos = pos;
        pos = source.Find(division,(pos+1));
        dest.Add(source.Mid(pre_pos,(pos-pre_pos)));
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM