基本 CString 運算
本主題說明下列基本 CString 作業:
Class CString
是以類別範本 CStringT 類別為基礎。 CString
typedef
是的 CStringT
。 更確切地說, CString
是 typedef
的 明確特製化的 CStringT
,這是使用類別範本定義類別的常見方式。 同樣定義的類別是 CStringA
與 CStringW
。
CString
、 CStringA
和 CStringW
定義於 atlstr.h 中。 CStringT
定義於 cstringt.h。
CString
、 CStringA
和 CStringW
每個都會取得一組由 定義 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;
當某個物件指派給另一個
CString
CString
物件時,會複製對象的內容。 因此,這兩個字串不會共享構成字串的實際字元參考。 如需如何使用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
相等。 Compare
、 operator==, 和 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++標準。