基本 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 Managed 專案的字串類別,請使用 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++ 標準。
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應