標準C 的字串操作

2021-05-24 09:01:52 字數 2836 閱讀 3327

使用過mfc會發現cstring比std::string好用,而使用過c#,會發現system.string用起來更爽。標準c++是否也可以得心應手地處理字串呢?答案是肯定的,我接下來 會介紹如何實現以下操作

字串的format

char*, wchar_t*, _bstr_t, ccombstr, basic_string, system.string間的轉換

trim操作

字串的分詞

字串與各種型別間的轉換

字串的hash操作

cstring與system.string都與format方法,在標準c++如何實現這樣的功能呢?有兩種方法:

使用boost的format方法

使用basic_stringstream

下面我就使用basic_stringstream進行format給出示例:

介紹字串型別char*,wchar_t*,_bstr_t,ccombstr,cstring,basic_string和system.string間的相互轉換

pin_ptraddr. wch

char*

wchar_t*

_bstr_t

ccombstr

cstring

basic_string

system.string

char*

mbstowcs_s

_bstr_t(char*)

ccombstr(char*)

cstring(char*)

string(char*)

gcnew string(char*)

wchar_t*

wcstombs_s

_bstr_t(wchar_t*)

ccombstr(wchar_t*)

cstring(wchar_t*)

wstring(wchar_t*)

gcnew string(wchar_t*)

_bstr_t

(char*)

(wchar_t*)

->char*->ccombstr

.getbstr()->cstring(bstr&)

->char*->string(char*)

char*->gcnew string(char*)

ccombstr

->cw2a->strcpy_s

wcscpy_s

_bstr_t()

cstring()

wstring()

gcnew string()

cstringa

strcpy_s

mbstowcs_s

_bstr_t()

ccombstr()

string()

gcnew string()

cstringw

wcstombs_s

wcscpy_s

_bstr_t()

ccombstr()

wstring()

gcnew string()

string

.c_str()->strcpy_s

mbstowcs_s

.c_str()->_bstr_t()

.c_str()->ccombstr()

cstring()

.c_str()->gcnew string()

system.string

ptrtostringchars 

->wch ->wcstombs_s

->wch->wcscpy_s 

->wch->_bstr_t()

->wch->ccombstr() 

->wch->cstring()

->wch->wstring()

具體內容請檢視:http://msdn.microsoft.com/en-us/library/ms235631.aspx

標準c++中沒有提供trim操作的方法,可以使用boost 的trim實現方案(http://www.boost.org/doc/libs/1_38_0/doc/html/string_algo/usage.html#id4001757 ),如下**所示:

但是,我要提醒一點,boost的trim_left_copy, trim_right_copy以及trim沒有支援多位元組字元(或許是因為寫這個實現的不是中國人)。因而上面**並不能得到預期的效果(如果將string改為wstring可以得到正確的結果)。cstring的trim也不能支援多位元組字元,所以說,大家寫程式,字串最好還是使用寬字元,不然就轉為寬字元後再做處理。下面貼出我寫的trim函式(寬位元組版本):

多位元組版本下的trim方法:

標準c++沒有cstring的tokenize——補充一句,同樣的問題,cstring不支援mbcs,不信,把中文的標點符號作為分隔符試試,它馬上就sb了,不要嫌我煩啊,強烈呼籲同胞在**中使用寬字元;也沒有system.string的split,那如何對字串進行分詞呢,可以使用boost庫或是其他第三方庫(這些老外寫的庫,是否支援mbcs,很令人懷疑,http://ishare.iask.sina.com.cn/f/5164324.html 這是乙個朋友總結的字串分詞方法),不過我推薦是使用_tcstok_s,也可以使用輕量級的方法,那就是basic_stringstream與getline的情侶組合。下面給出示例**:

輸出結果為:

_tcstok_s

楊俊 杜俊

楊輝 楊釗

getline

楊俊,杜俊

楊輝和楊釗

需要提出幾點:_tcstok_s是支援mbcs的,它會改變源字串;getline方法,一次只能指定乙個分隔符,而且不支援mbcs。

標準c字元和字串

atof 將字串轉換成浮點數 atoi 將字串轉換成整數 atol 將字串轉換成長整型數 isalnum 當字母或數字字元時,返回真值 isalpha 當字母字元時,返回真值 iscntrl 當控制字元時,返回真值 isdigit 當數字字元時,返回真值 isgraph 當非空格可列印字元時,返回真...

標準c字元和字串

atof 將字串轉換成浮點數 atoi 將字串轉換成整數 atol 將字串轉換成長整型數 isalnum 當字母或數字字元時,返回真值 isalpha 當字母字元時,返回真值 iscntrl 當控制字元時,返回真值 isdigit 當數字字元時,返回真值 isgraph 當非空格可列印字元時,返回真...

c 字串的操作

include include using namespace std string 型別 初始化string物件的方式 string str1 str1為空字串 string str2 abc 用字串字面值初始化str2 string str3 str2 將str3初始化為str2的乙個副本 st...