stringとCStringの比較

2380 ワード

stringは標準C++ライブラリの文字列クラス、CStringはWindows開発環境でよく使われる文字列クラスである、CStringは現在MFCから分離して単独で使用することができ、atlstrを含むだけでよい.hでいいです.
CStringはstringに比べて、大文字と小文字の変換、サイズ比較文字列を区別しないなど、使いやすい方法を提供しています.stringはこれらの方法を直接提供していないが,STLが提供するアルゴリズムと組み合わせることでこれらの動作を容易に実現できる.次に、CStringとstringの一般的な方法を比較します.
(1)大文字と小文字の変換
CString tmp(_T("A CString: Rangers!"));
//     
//  
tmp.MakeLower();
//  
tmp.MakeUpper();
//     
string str("Rangers Lead the way!");
transform(str.begin(),str.end(),str.begin(),tolower);//     
transform(str.begin(),str.end(),str.begin(),toupper);//  

(2)反転文字列
//     
CString tmp2(_T("The C++ Standard Library"));
tmp2.MakeReverse();

//     
string str("The C++ Standard Library");
reverse(str.begin(),str.end());

(3)文字列比較
CSring:
CString str1(_T("This is A CString"));
CString str2(_T("THIS IS A CSTRING"));
wcout <

string大文字小文字比較文字列の区別compareメソッドの使用
//     
string comp_str1("This is a string");
string comp_str2("THIS IS a String");
cout << comp_str1 << endl;
cout << comp_str2 << endl;
cout <

サイズを区別しないのは少し複雑で、大文字の比較文字を区別しない方法を自分で実現し、equalアルゴリズムを使用して比較を実現する必要があります.
bool nocase_compare(char c1,char c2)
{
  return tolower(c1) == tolower(c2);
}

bool ret_comp = comp_str1.size() == comp_str2.size()&& equal(comp_str1.begin(),comp_str1.end(),comp_str2.begin(),nocase_compare);

注意:equalの呼び出しは、第2の区間が少なくとも第1の区間と同じ要素を持つことを保証する必要があります.したがって、まず2つの文字列のサイズを比較する必要があります.そうしないと、定義されていない動作を引き起こす可能性があります.
(4)文字列前後の空白文字を除く
CStringの方法はかなり簡単です.
//            
CString beforeTrim(_T("   abcbc\t"));
wcout <

stringは似たような方法を提供していません.自分で実現する必要があります.
string trim_str(" abc\t");
string blanks("\f\v\r\t
"); trim_str.erase(0,trim_str.find_first_not_of(blanks)); trim_str.erase(trim_str.find_last_not_of(blanks)+1);

(5)サブストリングを取る
CStringはLeft()Right()Mid()などの方法を提供している.
stringはsubstr()メソッドを提供する
(6)フォーマット文字列
CStringはFormat関数で簡単に実現
CString FormatStr;
FormatStr.Format(_T("TEST:%.6f"),1.008979);

stringでは同様の方法はありませんが、String Stream Classesを使用して関連機能を実現することができます.詳細は後述します.