CString

CString没有基类。
一个CString对象由可变长度的一队字符组成。CString使用类似于Basic的语法提供函数和操作符。连接和比较操作符以及简化的内存管理使CString对象比普通字符串数组容易使用。
CString是基于TCHAR数据类型的对象。如果在你的程序中定义了符号_UNICODE,则TCHAR被定义为类型wchar_t,即16位字符类型;否则,TCHAR被定义为char,即8位字符类型。在UNICODE方式下,CString对象由16位字符组成。非UNICODE方式下,CString对象由8位字符组成。
当不使用_UNICODE时,CString是多字节字符集(MBCS,也被认为是双字节字符集,DBCS)。注意,对于MBCS字符串,CString仍然基于8位字符来计算,返回,以及处理字符串,并且你的应用程序必须自己解释MBCS的开始和结束字节。
CString对象还具有下列特征:
·CString可作为连接操作的结果而增大。
·CString对象遵循“值语义”。应将CString看作是一个真实的字符串而不是指向字符串的指针。
·你可以使用CString对象任意替换const char*和LPCTSTR函数参数。
·转换操作符使得直接访问该字符串的字符就像访问一个只读字符(C-风格的字符)数组一样。
提示:如果可能的话,应在框架中而不是堆中分配这个CString对象。这可以节省内存并简化参数的传递。
CString允许两个具有相同值的字符串共享相同的缓冲空间,这有助于你节省内存空间。但是,如果你初始直接改变该缓冲的内容(不使用MFC),则有可能在无意中改变了两个字符串。CString提供了两个成员函数CString::LockBuffer和CString::UnlockBuffer来帮助你保护你的数据。当你调用LockBuffer时,你就创建了一个字符串的一个拷贝,然后将引用计数设置为-1,这就“加锁”了该缓冲区。当缓冲区被加锁时,就没有其它的字符串可以引用该字符串中的数据,被加锁的字符串也不能引用其它字符串的数据。通过加锁该缓冲区内的字符串,就可以保证该字符串对数据的持续独占。当你使用完数据后,调用UnlockBuffer来将引用计数恢复为1。
更多的信息,参见“Visual C++程序员指南”中的“MFC字符串”和“字符串:Unicode和多字节字符集(MBCS)支持”,以及“Microsoft Visual C++库参考”中的“Microsoft Visual C++ 6.0运行库参考”。
#include <afx.h>

请参阅:
在“Visual C++ 程序员指南”中的:字符串:基本的CString操作,字符串:CString语义,字符串:CString与C字符串相关的操作,字符串:CString异常清除,字符串:CString参数传递

CString类成员

构造
CString以各种方法构造一个CString对象

字符串数组
GetLength返回CString对象中的字符数。对多字节字符,按8位字符计算;即在一个多字节字符中一个开始和结束字节算作两个字符
IsEmpty测试一个CString对象中是否不含有字符
Empty强制一个字符串的长度为0
GetAt返回在给定位置的字符
operator []返回在给定位置的字符--它是代替GetAt的操作符
SetAt设置给定位置上的字符
operator LPCTSTR像访问一个C风格的字符串一样,直接访问保存在一个CString对象中的字符

分配/串联
operator =给CString对象赋一个新值
operator +连接两个字符串并返回一个新字符串
operator +=把一个新字符串连接到一个已经存在的字符串的末端

比较
operator 比较操作符比较操作符(大小写敏感)
Compare比较两个字符串(大小写敏感)
CompareNoCase比较两个字符串(不区分大小写)
Collate比较两个字符串(大小写敏感,使用现场特别信息)
CollateNoCase比较两个字符串(不区分大小写,使用现场特别信息)

提取
Mid提取一个字符串的中间一部分(类似于BASIC的MID$函数)
Left提取一个字符串的左边一部分(类似于BASIC的LEFT$函数)
Right提取一个字符串的右边一部分(类似于BASIC的RIGHT$函数)
SpanIncluding提取一个字符串,该子字符串中仅含有某一字符集合中的字符。
SpanExcluding提取一个字符串,该子字符串中不含有某一字符集合中的字符。

其他转换
MakeUpper将字符串中的所有字符转换为大写字符
MakeLower将字符串中的所有字符转换为小写字符
MakeReverse将字符串中的字符以倒序排列
Replace用其它字符替换指定的字符
Remove从一个字符串中移走指定的字符
Insert在字符串中的给定索引处插入一个字符或一个子字符串
Delete从一个字符串中删除一个或多个字符
Format像sprintf函数一样格式化该字符串
FormatV像vprintf函数一样格式化该字符串
TrimLeft将字符串中前面的空格整理出字符串
TrimRight将字符串中结尾的空格整理出字符串
FormatMessage格式化一个消息字符串

搜索
Find在一个较大的字符串中查找字符或子字符串
ReverseFind在一个较大的字符串中从末端开始查找某个字符
FindOneOf查找与某个字符集合中的字符相匹配的第一个字符

归档/存储
operator <<把一个CString对象插入一个存档或转储的环境中
operator >>从一个存档中提取一个CString对象

缓冲区访问
GetBuffer返回一个指向CString对象的指针
GetBufferSetLength返回一个指向CString对象的指针,字符串被截断为指定的长度
ReleaseBuffer释放对GetBuffer所返回的缓冲区的控制权
FreeExtra通过释放原先为此字符串分配的额外内存来删除此字符串对象的额外开销
LockBuffer使引用计数无效并保护缓冲区内的数据
UnlockBuffer使引用计数有效并释放缓冲区中的数据

Windows专用
AllocSysString由CString数据分配一个BSTR
SetSysString使用CString对象中的数据来设置一个已存在的BSTR
LoadString从一个Windows资源中加载一个已经存在的CString对象
AnsiToOem实现由ANSI字符集到OEM字符集的对应转换
OemToAnsi实现由OEM字符集到ANSI字符集的对应转换