共用方式為


基本 CString 運算

本主題說明下列基本 CString 作業:

Class CString 是以類別範本 CStringT 類別為基礎。 CStringtypedef是的 CStringT。 更確切地說, CStringtypedef明確特製化的 CStringT,這是使用類別範本定義類別的常見方式。 同樣定義的類別是 CStringACStringW

CStringCStringACStringW 定義於 atlstr.h 中。 CStringT 定義於 cstringt.h。

CStringCStringACStringW 每個都會取得一組由 定義 CStringT 的方法和運算符,以搭配其支援的字串數據使用。 某些方法會複製 ,在某些情況下會超過 C 運行時間連結庫的字串服務。

注意: CString 是原生類別。 對於用於 C++/CLI 受控專案的字串類別,請使用 System.String

從標準 C 常值字串建立 CString 物件

您可以將 C 樣式常值字串指派給 , CString 就像您可以將一個物件指派給另一個 CString 對象一樣。

  • 將 C 常值字串的值指派給 CString 物件。

    CString myString = _T("This is a test");   
    
  • 將一個的值指派給另一個 CString CString 物件。

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

    當某個物件指派給另一個CStringCString物件時,會複製對象的內容。 因此,這兩個字串不會共享構成字串的實際字元參考。 如需如何使用 CString 物件做為值的詳細資訊,請參閱 CString 語意

    注意

    若要撰寫您的應用程式,以便針對 Unicode 或 ANSI 進行編譯,請使用 _T 巨集來撰寫常值字串。 如需詳細資訊,請參閱 Unicode 和多位元組位元集 (MBCS) 支援

存取 CString 中的個別字元

您可以使用 和 SetAt 方法來存取 物件GetAt中的CString個別字元。 您也可以使用陣列元素或下標運算子 ([ ] ) 來取得 GetAt 個別字元。 (這類似於依索引存取數位元素,如標準 C 樣式字串所示。字元的 CString 索引值是以零起始。

串連兩個 CString 物件

若要串連兩個 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".

串連運算子的至少一個 CString 自變數 (+ 或 +=) 必須是 物件,但您可以使用常數位符字串 (例如 "big", ) 或 char (例如 , 'x') 作為另一個自變數。

比較 CString 物件

Compare的 方法和 == 運算符CString相等。 Compareoperator==, 和 CompareNoCase 是 MBCS 和 Unicode 感知; CompareNoCase 也區分大小寫。 Collate的 方法是CString區分地區設定,而且通常比 慢Compare。 只有在您必須遵守目前地區設定所指定的排序規則時,才使用 Collate

下表顯示 C 運行時間連結庫中可用的 CString 比較函式及其相等的 Unicode/MBCS 可攜式函式。

CString 函式 MBCS 函式 Unicode 函式
Compare _mbscmp wcscmp
CompareNoCase _mbsicmp _wcsicmp
Collate _mbscoll wcscoll

類別CStringT範本會定義關係運算元(<、=、<=、>>==和 !=),可供 使用CString。 您可以使用這些運算符來比較兩個 CStrings ,如下列範例所示。

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

轉換 CString 物件

如需將 CString 物件轉換成其他字串類型的相關信息,請參閱 如何:在各種字串類型之間轉換。

搭配 wcout 使用 CString

若要搭配使用 CString, wcout 您必須明確地將 物件轉換成 , const wchar_t* 如下列範例所示:

CString cs("meow");

wcout << (const wchar_t*) cs << endl;

如果沒有轉換, cs 則會被視為 void* ,並 wcout 列印 對象的位址。 此行為是由範本自變數推算與多載解析之間的細微互動所造成,其本身正確且符合C++標準。

另請參閱

字串 (ATL/MFC)
CStringT 類別
範本特製化
如何:在各種字串類型之間轉換