基本CString操作
本主题说明下面的基本 CString 操作:
创建从标准C字符串的CString对象
在CString的访问各个字符
串联两CString对象
比较CString对象
转换CString对象
Class CString 基于选件类模板 CStringT选件类。 CString 是 CStringTtypedef。 正确,CString 是 CStringT的 显式专用化的typedef,是一种常用方法使用选件类模板定义选件类。 同样定义的选件类是 CStringA 和 CStringW。 有关显式专用化的更多信息,请参见 选件类模板实例化。
CString、 CStringA和 CStringW 在atlstr.h定义。 CStringT 在cstringt.h定义。
CString、 CStringA和 CStringW 获取 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的访问各个字符
使用 GetAt 和 SetAt 方法,可以在 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++标准模板参数推导和重载决策之间的细微的交互引起的。