CString,string,char的綜合比較

() 概述
  stringCString均是字符串模板類,string爲標準模板類(STL)定義的字符串類,已經納入C++標準之中;
  CStringtypedef CStringT<TCHAR, StrTraitMFC<TCHAR>> CString)爲Visual C++中最常用的字符串類,繼承自CSimpleStringT類,主要應用在MFCATL編程中,主要數據類型有char(應用於ANSI)wchar_t(unicode)TCHAR(ANSIunicode均可)
  char*C編程中最常用的字符串指針,一般以’/0’爲結束標誌;
  () 構造
  ² string是方便的,可以從幾乎所有的字符串構造而來,包括CStringchar*
  ² CString次之,可以從基本的一些字符串變量構造而來,包括char*等;
  ² char*沒有構造函數,僅可以賦值;
  ² 舉例:
  char* psz = joise;
  CString cstr( psz );
  string str( cstr );
  () 運算符重載
  a) operator=
  ² string是最方便的,幾乎可以直接用所有的字符串賦值,包括CStringchar*
  ² CString次之,可以直接用些基本的字符串賦值,包括char*等;
  ² 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+
  ² stringCString差不多,可以直接與char*進行加法,但不可以相互使用+運算符,即string str = str + cstr是非法的,須轉換成char*
  ² 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 +=
  ² string是最強大的,幾乎可以與所有的字符串變量+=,包括CStringchar*
  ² CString次之,可以與基本的一些字符串變量進行+=而來,包括char*等;
  ² char*沒有+=運算符,只能使用strcat把兩個指針連在一起;
  d) operator[]
  ² CString最好,當越界時會拋出斷言異常;
  ² stringchar*下標越界結果未定義;
  ² 舉例:
  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<=
  ² CStringstring之間不可以進行比較,但均可以與char*進行比較,並且比較的是值,而不是地址;
   cout << ( psz == cstr );
   cout << ( psz == str );
   cout << ( str == psz );
   cout << ( cstr == psz );//以上代碼返回均爲1
  () 常用算法
  a) 查找
  
  作用
  char*
  string
  CString
  查找指定值
  strchr
  strstr
  strrstr
  strspn
  find
  Find
  第一個匹配的值
  
  fild_first_of
  FindOneOf
  從後面開始查找
  
  
  ReserveFind
  指定匹配方式
  
  find_if
  
  注:find_if中是把範圍內的值挨個代入匹配函數直至返回true
  b) 比較
  
  作用
  char*
  string
  CString
  查找指定值(區分大小寫)
  strcmp
  strncmp
  strcoll
  _strncoll
  operator<
  operator>
  operator<=
  operator>=
  operator==
  operator!=
  Collate
  Compare
  查找指定值(不區分大小寫)
  _stricmp
  _strnicmp
  _stricoll
  _strnicoll
  
  CollateNoCase
  CompareNoCase
  注:返回值如果<0則前面的值小於後面的值,反之亦然
  c) 替換
  
  作用
  char*
  string
  CString
  查找指定值
  _strset
  _strnset
  replace
  replace_copy
  replace_copy_if
  replace_if
  
  Replace
  d) 插入
  
  作用
  char*
  string
  CString
  查找指定值
  
  insert
  Insert

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章