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,然後再組成陣列。
split(cstring source, cstringarray
&dest, cstring division)
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
C 實現CString和string的互相轉換
cstring std string 例子 cstring strmfc test std string strstl strstl strmfc.getbuffer 0 std string cstring 例子 cstring strmfc std string strstl test strm...
C 實現CString和string的互相轉換
cstring std string 例子 cstring strmfc test std string strstl strstl strmfc.getbuffer 0 unicode情形下 cstringw strw t test cstringa stra strw.getbuffer 0 s...
C 實現CString和string的互相轉換
使用ado時遇到轉化 1 bstr t與string的轉化 listtablename bstr t table name prstschema fields getitem table name value 獲取表的名稱 tablename.push back lpcstr table name ...