【转载】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字符集的对应转换 |