基本CString操作

本主题说明下面的基本 CString 操作:

  • 创建从标准C字符串的CString对象

  • 在CString的访问各个字符

  • 串联两CString对象

  • 比较CString对象

  • 转换CString对象

Class CString 基于选件类模板 CStringT选件类CStringCStringTtypedef。 正确,CStringCStringT的 显式专用化的typedef,是一种常用方法使用选件类模板定义选件类。 同样定义的选件类是 CStringACStringW。 有关显式专用化的更多信息,请参见 选件类模板实例化

CStringCStringACStringW 在atlstr.h定义。 CStringT 在cstringt.h定义。

CStringCStringACStringW 获取 CStringT 和运算符定义的方法与其所支持的字符串数据的使用。 某些方法副本,因此,在某些情况下,超过C运行库的字符串服务。

注意: CString 是本机选件类。 对用于c.的C++/CLI的字符串选件类管理的项目,使用 System.String

创建从标准C字符串的CString Objects

就象可以分配一 CString 对象到另一个中,可以指定C样式字符串到 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 Objects

若要串联两 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 Objects

Compare 方法和==运算符 CString 的等效。 Compare、 **operator==**和 CompareNoCase 可识别的MBCS和Unicode的; CompareNoCase 也不区分大小写。 CStringCollate 方法比 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 Objects

有关转换为其他字符串类型的CString对象的信息,请参见 如何:在各种字符串类型之间进行转换

使用wcout的CString

如下面的示例所示,若要使用CString和 wcout 必须显式转换为 const wchar_t* 的对象:

CString cs("meow");
  wcout << (const wchar_t*) cs << endl;

不带转换,void* 和 wcout 输出对象的地址,cs 将。 此行为由其正确和符合C++标准模板参数推导和重载决策之间的细微的交互引起的。

请参见

参考

CStringT选件类

选件类模板实例化

选件类模板的显式专用化

选件类模板(C++)的部分专用化

概念

如何:在各种字符串类型之间进行转换

其他资源

字符串(ATL/MFC)