本文解释基本的 CString 操作,包括:
- 从标准 C 字符串创建 CString 对象
- 访问 CString 中的单个字符
- 串接两个 CString 对象
- 比较 CString 对象
CString 类提供成员函数和重载运算符,它们可以复制(在某些情况下甚至超越)C 运行时库的字符串服务(例如 strcat )。
从标准 C 字符串创建 CString 对象
可将 C 样式的字符串分配给一个 CString ,就像可将一个 CString 对象分配到另一个 CString 对象一样:
- 将 C 字符串的值分配到 CString 对象: CString myString = "This is a test";
- 将一个 CString 的值分配到另一个 CString 对象: CString oldString = "This is a test"; CString newString = oldString;
将一个 CString 对象分配到另一个 CString 对象时,将复制该 CString 对象的内容。因此,两个字符串不会共享一个对组成字符串的实际字符的引用。有关使用 CString 对象作为值的更多信息,请参见文章 CString 语义 。 注意 若要编写应用程序,以便为 Unicode 或 ANSI 对其进行编译,请使用 _T 宏来编写字符串的代码。有关更多信息,请参见文章 Unicode 和多字节字符集 (MBCS) 支持 。
访问 CString 中的单个字符
可使用 GetAt 和 SetAt 成员函数来访问 CString 对象中的单个字符。还可使用数组元素、下标、运算符 ( [ ] )(而不是 GetAt )来获取单个字符,这与按索引来访问数组元素相似,正如在标准的 C 样式字符串中那样)。 CString 字符的引索值是从零开始的。
并置两个 CString 对象
要并置两个 CString 对象,请使用串联运算符( + 或 += ),如下所示:
CString s1 = "This "; // Cascading concatenation
s1 += "is a ";
CString s2 = "test";
CString message = s1 + "big " + s2; // Message contains "This is a big test".
必须至少有一个串联运算符( + 或 += )的参数是 CString 对象,但是能够为其他参数使用常数字符串(如 "big" )或 char (如“x”)。
比较 CString 对象
Compare 成员函数和 CString 的 == 运算符是等效的。 Compare 、 operator== 和 CompareNoCase 可识别 MBCS 和 Unicode;并且 CompareNoCase 不区分大小写。 CString 的 Collate 成员函数区分区域性,并且常常要比 Compare 慢。仅当有必要遵守当前区域指定的排序规则时,才应使用 Collate 。
下面的表显示了可用的 CString 比较函数及其在 C 运行时库中等效的可移植 Unicode/MBCS 函数:
Compare | _mbscmp | wcscmp |
CompareNoCase | _mbsicmp | _wcsicmp |
Collate | _mbscoll | wcscoll |
CString 类重写关系运算符( < , <= , >= , > , == 和 != )。可使用这些运算符来比较两个 CString ,如下所示:
CString s1( "Tom" );
CString s2( "Jerry" );
if( s1 < s2 ) ...