CString类

本文详细介绍了CString类的各种操作方法,包括字符串赋值、拼接、字符访问、比较等基本功能,以及如何将CString转换为C风格字符串进行标准库函数操作。
·                 将 C 字符串的值分配到 CString对象:
CString myString = "This is a test";
·                 将一个 CString的值分配到另一个 CString对象:
CString oldString = "This is a test";
CString newString = oldString;
访问 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的 ==运算符是等效的。Compareoperator==CompareNoCase可识别 MBCS 和 Unicode;并且 CompareNoCase不区分大小写。CString Collate成员函数区分区域性,并且常常要比 Compare慢。仅当有必要遵守当前区域指定的排序规则时,才应使用 Collate。
下面的表显示了可用的 CString 比较函数及其在 C 运行时库中等效的可移植 Unicode/MBCS 函数:
CString 函数
MBCS 函数
Unicode 函数
Compare
_mbscmp
wcscmp
CompareNoCase
_mbsicmp
_wcsicmp
Collate
_mbscoll
wcscoll
CString 类重写关系运算符( <<=>=>== !=)。可使用这些运算符来比较两个 CString,如下所示:
CString s1( "Tom" );
CString s2( "Jerry" );
if( s1 < s2 )
    ...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
CString 语义
虽然 CString 对象是能够增长的动态对象,但它们的行为与内置基元类和简单类一样。每个 CString对象表示一个唯一的值。应将 CString对象视为实际字符串而不是指向字符串的指针。
您可以将一个 CString 对象分配给另一个 CString 对象。但是,当您修改其中一个 CString对象时,将不会修改另一个 CString对象,如以下示例所示:
CString s1, s2;
s1 = s2 = "hi there";
 
if( s1 == s2 )             // TRUE - they are equal
    ...
 
s1.MakeUpper();         // Does not modify s2
if( s2[0] == 'h' )         // TRUE - s2 is still "hi there"
请注意,在示例中,这两个 CString对象被视为是“平等”的,因为它们表示相同的字符串。CString 类重载相等运算符 (==),以便根据两个 CString对象的值(内容)比较它们,而不是根据标识(地址)。

C 样式字符串相关的 CString 操作
将 CString 对象的内容当作 C 样式的空终止字符串来操作,常常是很有用的。本文阐述了以下主题:
·                 转换成 C 样式空终止字符串
·                 使用标准运行时库字符串函数
·                 直接修改 CString 的内容
·                 对 CString 对象使用变量参数函数
·                 指定 CString 形参
转换成 C 样式空终止字符串
请考虑以下两种情况:
·                 在最简单的情况下,可以将 CString对象转换成 LPCTSTR。LPCTSTR 类型转换运算符从 CString对象返回指向只读的 C 样式空终止字符串的指针。
LPCTSTR返回的指针指入由 CString使用的数据区域。如果 CString离开了这个范围并且被自动删除,或其他原因更改了 CString 的内容,那么 LPCTSTR指针将不再有效。请将该指针指向的字符串视为临时的。
·                 可使用 CString函数(如 SetAt)来修改字符串对象中的单个字符。但是,如果需要可直接修改的 CString对象字符的副本,那么请使用 strcpy(或可移植 Unicode/MBCS 的 _tcscpy)来将 CString对象复制到单独的缓冲区,在那里可安全地修改字符串,如以下示例中所示:
·                        CString theString( "This is a test" );
·                        LPTSTR lpsz = new TCHAR[theString.GetLength()+1];
·                        _tcscpy(lpsz, theString);
//... modify lpsz as much as you want
注意    strcpy(或可移值 Unicode/MBCS 的 _tcscpy)的第二个参数是 const wchar_t*或 const char*。以上示例为该参数传递一个 CString。C++ 编译器自动将为应用转换函数,该转换函数是为将 CString转换为 LPCTSTR的 CString类定义的。定义从一种类型到另一种类型的转换操作的能力是 C++ 最为有用的功能之一。 (ANSI) (Unicode)
使用标准运行时库字符串函数
在大多数情况下,应该能够找到 CString成员函数来执行任何字符串操作,为了进行这种操作,您可能会考虑使用标准 C 运行时库字符串函数,如 strcmp(或可移植 Unicode/MBCS 的 _tcscmp)。
直接修改 CString 的内容
在大多数情况下,应使用 CString成员函数来修改 CString对象的内容或将 CString转换为一个 C 样式的字符串。
但是,在某些情况下,比如使用需要字符缓冲区的操作系统函数,直接修改 CString内容是较为有利的。
GetBufferReleaseBuffer成员函数使您能够访问 CString对象的内部字符缓冲区,并直接进行修改。以下步骤显示如何使用这些函数来达到这一目的:
1.               为 CString对象调用 GetBuffer,并指定所需缓冲区的长度。
2.               使用由 GetBuffer返回的指针来直接将字符写入 CString对象中。
3.               调用 CString对象的 ReleaseBuffer来更新所有的内部 CString状态信息,如字符串的长度。直接修改完 CString对象的内容之后,在调用任何其他 CString成员函数之前必须调用 ReleaseBuffer。
CString 对象使用变量参数函数
有些 C 函数采用数量不定的参数。一个明显的示例是 printf。由于这种函数声明的方式,编译器无法确定参数的类型,并且无法确定在每个参数上执行哪种转换操作。因此,当将 CString对象传递给采用数量不定的参数的函数时,使用显式类型转换是十分重要的。
在变量参数函数中使用 CString 对象
·                 将 CString显式转换为 LPCTSTR字符串,如下所示:
·                        CString kindOfFruit = "bananas";
·                        int       howmany = 25;
printf( "You have %d %s/n", howmany, (LPCTSTR)kindOfFruit );
指定 CString 形参
对于大多数需要字符串参数的函数,最好将函数原型中的形参指定为一个指向字符 ( LPCTSTR) 而非 CString的 const指针。当将形参指定为指向字符的 const指针时,可将指针传递到 TCHAR数组(如字符串 ["hi there"])或传递到 CString对象。CString 对象将自动转换成 LPCTSTR。任何能够使用 LPCTSTR 的地方也能够使用 CString对象。
如果某个形参将不会被修改,则也将该参数指定为常数字符串引用(即 const CString&)。如果函数要修改该字符串,则删除 const修饰符。如果需要默认为空值,则将其初始化为空字符串 [""],如下所示:
void AddCustomer( const CString& name,
                    const CString& address,
                    const CString& comment = "" );
对于大多数函数结果,按值返回 CString对象即可。
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值