基本 CString 操作

本主题介绍以下基本 CString 操作:

Class CString 基于类模板 CStringT 类CStringCStringT 的一个 typedef。 更确切地说,CString 是对 CStringT 的显式专用化的 typedef,它是使用类模板来定义类的常见方法。 进行类似定义的类是 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;
    

    将一个 CString 对象分配给另一个时,将复制 CString 对象的内容。 因此,这两个字符串不共享对构成字符串的实际字符的引用。 若要详细了解如何使用 CString 对象作为值,请参阅 CString 语义

    注意

    若要编写应用程序,以便可以针对 Unicode 或 ANSI 编译该应用程序,请使用 _T 宏对文本字符串进行编码。 有关详细信息,请参阅 Unicode 和多字节字符集 (MBCS) 支持

访问 CString 中的单个字符

可以使用 GetAtSetAt 方法访问 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、运算符 ==CompareNoCase 是 MBCS 和 Unicode 感知型;CompareNoCase 也不区分大小写。 CStringCollate 方法区分区域设置,其速度通常比 Compare 慢。 Collate 仅在你必须遵守当前区域设置指定的排序规则的地方使用。

下表显示了可用的 CString 比较函数及其在 C 运行时库中的等效 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 对象转换为其他字符串类型,请参阅如何:在各种字符串类型之间进行转换

将 CString 与 wcout 配合使用

若要将 CString 与 wcout 配合使用,必须以显式方式将该对象强制转换为 const wchar_t*,如以下示例所示:

CString cs("meow");

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

如果没有强制转换,则会将 cs 视为 void*wcout 会输出对象的地址。 此行为是由模板参数推导与重载解析之间的细微交互引起的,它们本身正确且符合 C++ 标准。

另请参阅

字符串 (ATL-MFC)
CStringT 类
模板特殊化
如何:在各种字符串类型之间进行转换