VC之CString,wchar_t,int,string,char*之間的轉(zhuǎn)換

2009-07-30

VC之CString,wchar_t,int,string,char*之間的轉(zhuǎn)換

CString path = "asdf";

wchar_t wstr[256] = path.AllocSysString();

或者:

wchar_t wcstring[256];

MultiByteToWideChar(CP_ACP,0,path,-1,wcstring,256);

2. wchar_t轉(zhuǎn)CString

WideCharToMultiByte(CP_ACP,0,wcstring,256,path.GetBuffer(0),256,NULL,NULL);

path.ReleaseBuffer(0);

3. string 轉(zhuǎn) CString

CString.format("%s", string.c_str());

4. char 轉(zhuǎn) CString

CString.format("%s", char*);

5. char 轉(zhuǎn) string

string s(char *);

6. string 轉(zhuǎn) char *

char *p = string.c_str();

7.CString 轉(zhuǎn) string

string s(CString.GetBuffer());

CString?? str?? =?? "fdjfdas";?

string?? s?? =?? (LPCTSTR)str;

1玷过,string -> CString

CString.format("%s", string.c_str());

用c_str()確實(shí)比data()要好.

2笋颤,char -> string

string s(char *);

你的只能初始化,在不是初始化的地方最好還是用assign().

3,CString -> string

string s(CString.GetBuffer());

GetBuffer()后一定要ReleaseBuffer(),否則就沒有釋放緩沖區(qū)所占的空間.

《C++標(biāo)準(zhǔn)函數(shù)庫》中說的

有三個(gè)函數(shù)可以將字符串的內(nèi)容轉(zhuǎn)換為字符數(shù)組和C—string

1.data(),返回沒有”\0“的字符串?dāng)?shù)組

2,c_str()都毒,返回有”\0“的字符串?dāng)?shù)組

3,copy()

---------------------------------------------------------------

CString與int戳护、char*腌且、char[100]之間的轉(zhuǎn)換- -

CString與int榛瓮、char*、char[100]之間的轉(zhuǎn)換- -

CString互轉(zhuǎn)int

將字符轉(zhuǎn)換為整數(shù)柄粹,可以使用atoi驻右、_atoi64或atol崎淳。

而將數(shù)字轉(zhuǎn)換為CString變量,可以使用CString的Format函數(shù)恨豁。如

CString s;

int i = 64;

s.Format("%d", i)

Format函數(shù)的功能很強(qiáng)爬迟,值得你研究一下。

void CStrDlg::OnButton1()

{

// TODO: Add your control notification handler code here

CString ss="1212.12";

int temp=atoi((char*)LPCTSTR(ss));

CString aa;

aa.Format("%d",temp);

AfxMessageBox("var is " + aa);

}

sart.Format("%s",buf);

CString互轉(zhuǎn)char*

///char * TO cstring

CString strtest;

char * charpoint;

charpoint="give string a value";

strtest=charpoint;

///CString TO char *

charpoint=strtest.GetBuffer(strtest.GetLength());

標(biāo)準(zhǔn)C里沒有string,char *==char []==string


char *轉(zhuǎn)成CString

可以用CString.Format("%s",char *)這個(gè)方法來將char *轉(zhuǎn)成CString计福。

CString轉(zhuǎn)成char *

用操作符(LPCSTR)strtest 或者 (char*)(LPCSTR)strtest 就可以了象颖。

CString轉(zhuǎn)換 char[100]

char a[100];

CString str("aaaaaa");

strncpy(a,(LPCTSTR)str,sizeof(a));

Trackback:?http://tb.blog.csdn.net/TrackBack.aspx?PostId=1570001

(一) 概述

string和CString均是字符串模板類说订,string為標(biāo)準(zhǔn)模板類(STL)定義的字符串類潮瓶,已經(jīng)納入C++標(biāo)準(zhǔn)之中筋讨;

CString(typedef CStringT > CString)為Visual C++中最常用的字符串類,繼承自CSimpleStringT類赤屋,主要應(yīng)用在MFC和ATL編程中壁袄,主要數(shù)據(jù)類型有char(應(yīng)用于ANSI)嗜逻,wchar_t(unicode),TCHAR(ANSI與unicode均可)逆日;

char*為C編程中最常用的字符串指針室抽,一般以'\0'為結(jié)束標(biāo)志靡努;

(二) 構(gòu)造

string是方便的,可以從幾乎所有的字符串構(gòu)造而來兽泄,包括CString和char*;

CString次之胃珍,可以從基本的一些字符串變量構(gòu)造而來堂鲜,包括char*等护奈;

char*沒有構(gòu)造函數(shù)哥纫,僅可以賦值蛀骇;

舉例:

char* psz = “joise”;

CString cstr( psz );

string str( cstr );

(三) 運(yùn)算符重載

a) operator=

string是最方便的,幾乎可以直接用所有的字符串賦值鸵闪,包括CString和char*暑诸;

CString次之个榕,可以直接用些基本的字符串賦值,包括char*等凰萨;

char*只能由指針賦值械馆,并且是極危險(xiǎn)的操作,建議使用strcpy或者memcpy珊搀,而且char*在聲明的時(shí)候如未賦初值建議先設(shè)為NULL食棕,以避免野指針,令你抓狂簿晓;

舉例:

char *psz = NULL;

psz = new char[10]; //當(dāng)然憔儿,以上的直接寫成char *psz = new char[10];也是一樣

memset( psz, 0, 10 );

strcpy( psz, “joise” );

CString cstr;

cstr = psz;

string str;

str = psz;

str = cstr;

delete []psz;

b) operator+

string與CString差不多谒臼,可以直接與char*進(jìn)行加法,但不可以相互使用+運(yùn)算符蜈缤,即string str = str + cstr是非法的底哥,須轉(zhuǎn)換成char*趾徽;

char*沒有+運(yùn)算,只能使用strcat把兩個(gè)指針連在一起疲酌;

舉例:

char* psz = “joise”;

CString cstr = psz;

cstr = cstr + psz;

string str = psz;

str = str + str + psz;

strcat( psz, psz );

strcat( psz, cstr );//合法

strcat( psz, str );//非法了袁,由此可見早像,CString可自動(dòng)轉(zhuǎn)換為const char*卢鹦,而string不行

c) operator +=

string是最強(qiáng)大的,幾乎可以與所有的字符串變量+=冀自,包括CString和char*熬粗;

CString次之驻呐,可以與基本的一些字符串變量進(jìn)行+=而來芳来,包括char*等即舌;

char*沒有+=運(yùn)算符顽聂,只能使用strcat把兩個(gè)指針連在一起盯仪;

d) operator[]

CString最好,當(dāng)越界時(shí)會(huì)拋出斷言異常耀石;

string與char*下標(biāo)越界結(jié)果未定義娶牌;

舉例:

char* psz = “joise”;

CString cstr = psz;

cout << cstr[8];

string str = psz;

cout << str[8];

cout << psz[8];

e) operator== 馆纳、operator!=、operator> 鲁驶、operator< 钥弯、operator>= 督禽、perator<=

CString與string之間不可以進(jìn)行比較狈惫,但均可以與char*進(jìn)行比較胧谈,并且比較的是值,而不是地址客冈;

cout << ( psz == cstr );

cout << ( psz == str );

cout << ( str == psz );

cout << ( cstr == psz );//以上代碼返回均為1

(四) 常用算法

a) 查找

作用 char* string CString

查找指定值 strchr

strstr

strrstr

strspn find Find

第一個(gè)匹配的值 fild_first_of FindOneOf 從后面開始查找 ReserveFind 指定匹配方式 find_if?

注:find_if中是把范圍內(nèi)的值挨個(gè)代入匹配函數(shù)直至返回true

b) 比較

作用 char* string CString 查找指定值(區(qū)分大小寫) strcmp

strncmp

strcoll

_strncoll operator<

operator>

operator<=

operator>=

operator==

operator!= Collate

Compare 查找指定值(不區(qū)分大小寫) _stricmp

_strnicmp

_stricoll

_strnicoll CollateNoCase

CompareNoCas?

注:返回值如果<0則前面的值小于后面的值场仲,反之亦然

c) 替換

作用 char* string CString 查找指定值 _strset

_strnset

replace

replace_copy

replace_copy_if

replace_if Replace?

d) 插入

作用 char* string CString 查找指定值 insert Insert?

e) 增加 作用 char* string CString 動(dòng)態(tài)增加值 strcat push

append Append

AppendChar

AppendFormat

f) 截取

作用 char* string CString 得到部分值 用下標(biāo)操作 substr Left

Mid

Right

Truncate

g) 移除

作用 char* string CString 移除部份值 remove Remove 移除空白值 RemoveBlanks

注:此為ATL提供渠缕,非C函數(shù) remove_if Trim

TrimLeft

TrimRig

h) 轉(zhuǎn)換大小寫

作用 char* string CString 轉(zhuǎn)換大小寫 _strlwr

_strupr MakeLower

MakeUpper

i) 與其他類型轉(zhuǎn)換

作用 char* string CString 轉(zhuǎn)化為數(shù)字 atoi

atod

atof Format 轉(zhuǎn)化為char* c_str

GetBuffer

GetBufferSetLen?

j) 格式化

作用 char* string CString 格式化 sprintf Format

k) 得到長度

作用 char* string CString

得到長度 strlen length GetLength 得到大小 size GetAllocLength?

l) 判斷為空

作用 char* string CString 判斷是否為空判斷是否==NULL或者第一個(gè)字符是否是'\0' empty IsEmpty?

m) 重定義大小

作用 char* string CString 重定義大小 realloc

new resize GetBufferSetLength?

n) 釋放資源

作用 char* string CString 釋放 free

delete (delete[]) ReleaseBuffer

ReleaseBufferSetLength

(五) 安全性>

CString > string > char*付鹿;

(六) 靈活性

CString > string >char*蚜迅;

(七) 可移植性

char* = string > CString

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末坐梯,一起剝皮案震驚了整個(gè)濱河市刹帕,隨后出現(xiàn)的幾起案子偷溺,更是在濱河造成了極大的恐慌,老刑警劉巖侦另,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件褒傅,死亡現(xiàn)場離奇詭異殿托,居然都是意外死亡支竹,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來待诅,“玉大人,你說我怎么就攤上這事募书。” “怎么了莹捡?”我有些...
    開封第一講書人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵鬼吵,是天一觀的道長。 經(jīng)常有香客問我篮赢,道長齿椅,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任启泣,我火速辦了婚禮涣脚,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘寥茫。我一直安慰自己遣蚀,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開白布纱耻。 她就那樣靜靜地躺著芭梯,像睡著了一般弄喘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,521評(píng)論 1 304
  • 那天查描,我揣著相機(jī)與錄音匀油,去河邊找鬼。 笑死弛车,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的唬血。 我是一名探鬼主播,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼勒叠,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了噪舀?” 一聲冷哼從身側(cè)響起昆稿,我...
    開封第一講書人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后配乓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年志电,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布玛追,位于F島的核電站,受9級(jí)特大地震影響岳颇,放射性物質(zhì)發(fā)生泄漏击狮。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧酷誓,春花似錦、人聲如沸娘扩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽怀估。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背匿沛。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來泰國打工推姻, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓队丝,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子叶圃,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容