CString の基本操作

更新 : 2007 年 11 月

ここでは以下の CString 文字列の基本操作について説明します。

  • 標準 C リテラル文字列からの CString オブジェクトの生成

  • CString 中の文字のアクセス

  • 2 つの CString オブジェクトの結合

  • CString オブジェクトの比較

CString クラスのメンバ関数と演算子は、C ランタイム ライブラリの文字列操作機能 (strcat_s など) と同等か拡張されたものです。ここでは、CString クラスにおける主な操作について説明します。

標準 C リテラル文字列からの CString オブジェクトの生成

C 形式のリテラル文字列を CString オブジェクトに代入することも、ある CString を別の CString に代入することもできます。

  • C リテラル文字列の値を CString オブジェクトに代入する場合

    CString myString = _T("This is a test");   
    
  • CString オブジェクトの値をほかの CString オブジェクトに代入する場合

    CString oldString = _T("This is a test");
    CString newString = oldString;
    

    CString オブジェクトを別の CString オブジェクトに代入すると、オブジェクトの内容がコピーされます。したがって、2 つの CString オブジェクトが同一の実体を指すことはありません。CString オブジェクトを値として扱う方法については、「CString の評価」を参照してください。

    72b2swax.alert_note(ja-jp,VS.90).gifメモ :

    Unicode または ANSI 用にコンパイルできるアプリケーションを作成するには、_T マクロを使用してリテラル文字列を記述します。詳細については、「Unicode とマルチバイト文字セット (MBCS : Multibyte Character Set) のサポート」を参照してください。

CString 中の文字のアクセス

CString オブジェクト内の文字はメンバ関数 GetAt および SetAt を使用してアクセスできます。文字の値を調べるときは、GetAt の代わりに、配列要素つまり添字演算子 ([ ]) も使用できます。この方法は標準 C スタイルの文字列で配列要素をインデックスでアクセスする方法と同じです。CString 内の文字の配列要素番号は 0 が先頭になります。

2 つの CString オブジェクトの結合

2 つの CString オブジェクトを結合するには、結合演算子 (+ または +=) を使用します。

CString s1 = _T("This ");        // Cascading concatenation
s1 += _T("is a ");
CString s2 = _T("test");
CString message = s1 + _T("big ") + s2;  
// Message contains "This is a big test".

結合演算子 (+ または +=) の引数のうち、少なくとも 1 個は CString オブジェクトにする必要がありますが、それ以外の引数には文字列定数 ("big" など) や char ('x' など) を使用できます。

CString オブジェクトの比較

CString において、Compare メンバ関数と演算子 "==" は等価です。メンバ関数 Compare、演算子 ==、およびメンバ関数 CompareNoCase は MBCS および Unicode に対応しています。CompareNoCase は大文字と小文字を区別しません。CString クラスのメンバ関数 Collate はロケールを認識しますが、Compare よりも動作が遅い場合があります。Collate は固有の並べ替え順序をサポートする必要がある場合以外は使用しないでください。

CString の比較関数および相当する Unicode/MBCS 互換の C ランタイム ライブラリ関数を次の表に示します。

CString の関数

MBCS ランタイム関数

Unicode 関数

Compare

_mbscmp

wcscmp

CompareNoCase

_mbsicmp

_wcsicmp

Collate

_mbscoll

wcscoll

CString クラスでは、関係演算子 (<、<=、>=、>、==、!=) をオーバーライドして関数 Compare を使用します。2 つの CStrings オブジェクトは次のように比較されます。

CString s1(_T("Tom"));
CString s2(_T("Jerry"));
ASSERT(s2 < s1);

参照

その他の技術情報

文字列 (ATL/MFC)