(一) 概述算法
1.string和CString均是字符串模a板類;編程
2.string爲標準模板類(STL)定義的字符串類,已經歸入C++標準之中;數組
3.CString(typedef CStringT<TCHAR, StrTraitMFC<TCHAR>> CString)爲Visual C++中最經常使用的字符串類,繼承自CSimpleStringT類,主要應用在MFC和ATL編程中,主要數據類型有char,wchar_t(unicode),TCHAR(ANSI與unicode都可); 安全
4.char*爲C編程中最經常使用的字符串指針,通常以’\0’爲結束標誌;函數
(二) 構造spa
1.string是方便的,能夠從幾乎全部的字符串構造而來,包括CString和char*;.net
2.CString次之,能夠從基本的一些字符串變量構造而來,包括char*等;指針
3.char*沒有構造函數,僅能夠賦值;code
4.char[]字符數組;blog
舉例:
char* psz = "joise";
CString cstr( psz );
string str( cstr );
(三) 運算符重載
a) operator=
1.string是最方便的,幾乎能夠直接用全部的字符串賦值,包括CString和char*;
2.CString次之,能夠直接用些基本的字符串賦值,包括char*等;
3.char*只能由指針賦值,而且是極危險的操做,建議使用strcpy或者memcpy,並且char*在聲明的時候如未賦初值建議先設爲NULL,以免野指針,令你抓狂;
舉例:
char *psz = NULL;
psz = new char[10]; //固然,以上的直接寫成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+
1.string與CString差很少,能夠直接與char*進行加法,但不能夠相互使用+運算符,即string str = str + cstr是非法的,須轉換成char*;
2.char*沒有+運算,只能使用strcat把兩個指針連在一塊兒;
舉例:
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可自動轉換爲const char*,而string不行
c) operator +=
1.string是最強大的,幾乎能夠與全部的字符串變量+=,包括CString和char*;
2.CString次之,能夠與基本的一些字符串變量進行+=而來,包括char*等;
3.char*沒有+=運算符,只能使用strcat把兩個指針連在一塊兒;
d) operator[]
1.CString最好,當越界時會拋出斷言異常;
2.string與char*下標越界結果未定義;
舉例:
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之間不能夠進行比較,但都可以與char*進行比較,而且比較的是值,而不是地址;
cout << ( psz == cstr );
cout << ( psz == str );
cout << ( str == psz );
cout << ( cstr == psz );//以上代碼返回均爲1
(四) 經常使用算法
a) 查找
b) 比較
注:返回值若是<0則前面的值小於後面的值,反之亦然
c) 替換
d) 插入
e) 增長
f) 截取
g) 移除
h) 轉換大小寫
i) 與其餘類型轉換
j) 格式化
k) 獲得長度
l) 判斷爲空
m) 重定義大小
n) 釋放資源
(五) 安全性
CString > string > char*;
(六) 靈活性
CString > string >char*;
(七) 可移植性
char* = string > CString
(八) 總結
綜上所述,我我的認爲,在MFC、ATL中使用字符串儘可能使用CString,畢竟都是微軟的孩子,各方面都比其它更有優點,而在非微軟平臺上或對移植性要求較高的場合推薦使用string,標準模板庫提供了那麼強大的泛型算法,不必再本身去造車輪。
(九) 參考文獻
主要參考的是MSDN,就不一一列出了。
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/zhoubl668/archive/2008/09/17/2940652.aspx