C S tring
CString 没 有 基 类 。
- 个 CString 对 象 由 可 变 长 度 的 一 队 字 符 组 成 。 CString 使
用 类 似 于 Basic 的语法 提 供 函 数 和 操 作 符 。 连 接 和 比 较 操 作 符 以 及 简 化 的 内 存 管 理 使 CString 对 象比 普 通 字 符 串 数 组 容 易 使 用 。
CString 是 基 于 TCHAR 数 据 类 型 的 对 象 。 如 果 在 你 的 程 序 中 定 义 了 符 号
_UNICODE ,则 TCHAR 被 定 义 为 类 型 wchar_t ,即 16 位 字 符 类 型 ;否 则 ,TCHAR
被 定 义 为 char, 即 8 位 字 符 类 型 。 在 UNICODE 方 式 下 , CString 对 象 由 16 位
当 不 使 用 _UNICODE 时 , CString 是 多 字 节 字 符 集 ( MBC S , 也 被 认 为 是 双 字 节字 符 集 , DBCS ) 。 注 意 , 对 于 MBCS 字 符 串 , CString 仍 然 基 于 8 位 字 符 来 计算 , 返 回 , 以 及 处 理 字 符 串 , 并 且 你 的 应 用 程 序 必 须 自 己 解 释 MBCS 的 开 始 和结 束 字 节 。
CString 对 象 还 具 有 下 列 特 征 :
-
CString 可 作 为 连 接 操 作 的 结 果 而 增 大 。
-
CString 对 象 遵 循 “ 值 语 义 ” 。 应 将 CString 看 作 是 一 个 真
实 的 字 符 串 而 不是 指 向 字 符 串 的 指 针 。
-
你 可 以 使 用 C S tring 对 象 任 意 替 换 Coust char* 和 LPCTSTR
函 数 参 数 。
-
转 换 操 作 符 使 得 直 接 访 问 该 字 符 串 的 字 符 就 像 访 问 一
个 只 读 字 符 ( C - 风 格的 字 符 ) 数 组 一 样 。
提 示 如 果 可 能 的 话 , 应 在 框 架 中 而 不 是 堆 中 分 配 这 个 CString 对 象 。这 可 以 节 省 内 存 并 简 化 参 数 的 传 递 。
CString 允 许 两 个 具 有 相 同 值 的 字 符 串 共 享 相 同 的 缓 冲 空 间 , 这 有 助 于 你 节 省 内存 空 间 。 但 是 , 如 果 你 初 始 直 接 改 变 该 缓 冲 的 内 容 ( 不 使 用 MFC ) , 则 有 可 能在 无 意 中 改 变 了 两 个 字 符 串 。 CString 提 供 了 两 个 成 员 函 数 CString::LockBuffer 和 CString::UnlockBuffer 来 帮 助 你 保 护 你 的 数 据 。 当 你 调 用 LockBuffer 时 , 你就 创 建 了 一 个 字 符 串 的 一 个 拷 贝 , 然 后 将 引 用 计 数 设 置 为 -1 , 这 就 “ 加 锁 ” 了该 缓 冲 区 。 当 缓 冲 区 被 加 锁 时 , 就 没 有 其 它 的 字 符 串 可 以 引 用 该 字 符 串 中 的 数据 , 被 加 锁 的 字 符 串 也 不 能 引 用 其 它 字 符 串 的 数 据 。 通 过 加 锁 该 缓 冲 区 内 的 字符 串 , 就 可 以 保 证 该 字 符 串 对 数 据 的 持 续 独 占 。 当 你 使 用 完 数 据 后 , 调 用UnlockBuffer 来 将 引 用 计 数 恢 复 为 1 。
更 多 的 信 息 , 参 见 “ Visual C++ 程 序 员 指 南 ” 中 的 “ MFC 字 符 串 ” 和 “ 字 符 串 :
Unicode 和 多 字 节 字 符 集 ( MBC S )支持”,以 及“ Microsoft Visual C++ 库 参 考 ” 中 的 “ M icrosoft Visual C++ 6.0 运 行 库 参 考 ” 。
#include <afx.h>
请 参 阅 在 “ Visual C++ Programmer's 指 南 ” 中 的 : 字 符 串 : 基 本 的 CString 操作 ,
字 符 串 : CString 语 义 , 字 符 串 : CString 与 C -Style Strings 相 关 的 操作,
字 符 串 : CString 异 常 清 除 , 字 符 串 : CString 参 数 传 递
C String 类 成 员
CString 以 各 种 方 法 构 造 一 个 CString 对 象
The String as an A rray
GetLength 返 回 CString 对 象 中 的 字 符 数 。 对 多 字 节 字 符 , 按 8 位 字 符 计 算 ; 即 在 一 个 多 字 节 字 符 中 一 个 开始 和 结 束 字 节 算 作 两 个 字 符
IsEmpty 测 试 一 个 CString 对 象 中 是 否 不 含 有 字 符
Empty 强 制 一 个 字 符 串 的 长 度 为 0
GetAt 返 回 在 给 定 位 置 的 字 符
Operator[] 返 回 在 给 定 位 置 的 字 符 – – – 它 是 代 替 GetAt 的 操 作符
SetAt 设 置 给 定 位 置 上 的 字 符
Operator LPCTSTR 象 访 问 一 个 C 风 格 的 字 符 串 一 样 , 直 接 访 问 保 存
在 一 个 CString 对 象 中 的 字 符
Operator = 给 CString 对 象 赋 一 个 新 值
Operator + 连 接 两 个 字 符 串 并 返 回 一 个 新 字 符 串
Operator += 把 一 个 新 字 符 串 连 接 到 一 个 已 经 存 在 的 字 符 串的 末 端
Comparison
Operator == <, etc. 比 较 操 作 符 ( 大 小 写 敏 感 ) Compare 比 较 两 个 字 符 串 ( 大 小 写 敏 感 ) CompareNoCase 比 较 两 个 字 符 串 ( 不 区 分 大 小 写 )
Collate 比 较 两 个 字 符 串 ( 大 小 写 敏 感 , 使 用 现 场 特 别 信息 )
CollateNoCase 比 较 两 个 字 符 串 ( 不 区 分 大 小 写 , 使 用 现 场 特 别
信 息 )
M id |
提 取 一 个 字 符 串 的 中 间 一 部 分 ( 类 似 于 |
BASIC | 的 |
---|---|---|---|
M ID$ 函 数 ) |
|||
Left |
提 取 一 个 字 符 串 的 左 边 一 部 分 ( 类 似 于 |
BASIC | 的 |
LEFT$ 函 数 ) |
|||
Right |
提 取 一 个 字 符 串 的 右 边 一 部 分 ( 类 似 于 |
BASIC | 的 |
RIGHT $ 函 数 ) |
SpanIncluding 提 取 一 个 字 符 串 , 该 子 字 符 串 中 仅 含 有 某 一 字 符
集 合 中 的 字 符 。
SpanExcluding 提 取 一 个 字 符 串 , 该 子 字 符 串 中 不 含 有 某 一 字 符
集 合 中 的 字 符 。
Othe r Conversion s MakeUpper 将 字 符 串 中 的 所 有 字 符 转 换 为 大 写 字 符
MakeLower 将 字 符 串 中 的 所 有 字 符 转 换 为 小 写 字 符
MakeReverse 将 字 符 串 中 的 字 符 以 倒 序 排 列
Replace 用 其 它 字 符 替 换 指 定 的 字 符
Remove 从 一 个 字 符 串 中 移 走 指 定 的 字 符
Insert 在 字 符 串 中 的 给 定 索 引 处 插 入 一 个 字 符 或 一 个 子字 符 串
Delete 从 一 个 字 符 串 中 删 除 一 个 或 多 个 字 符
Format 像 sprintf 函 数 一 样 格 式 化 该 字 符 串
FormatV 像 vprintf 函 数 一 样 格 式 化 该 字 符 串
TrimLeft 将 字 符 串 中 前 面 的 空 格 整 理 出 字 符 串
TrimRight 将 字 符 串 中 结 尾 的 空 格 整 理 出 字 符 串
FormatMessage 格 式 化 一 个 消 息 字 符 串
Searchin g Find 在 一 个 较 大 的 字 符 串 中 查 找 字 符 或 子 字 符 串ReverseFind 在 一 个 较 大 的 字 符 串 中 从 末 端 开 始 查 找 某 个 字 符FindOneOf 查 找 与 某 个 字 符 集 合 中 的 字 符 相 匹 配 的 第 一 个 字
符
Operator << 把 一 个 CString 对 象 插 入 一 个 存 档 或 转 储 的 环 境 中
Operator >> 从 一 个 存 档 中 提 取 一 个 CString 对 象
Buffer Access
GetBuffer 返 回 一 个 指 向 CString 对 象 的 指 针
GetBufferSetLengt h
返 回 一 个 指 向 CString 对 象 的 指 针 , 字 符 串 被 截 断 为指 定 的 长 度
ReleaseBuffer 释 放 对 GetBuffer 所 返 回 的 缓 冲 区 的 控 制 权
FreeExtra 通 过 释 放 原 先 为 此 字 符 串 分 配 的 额 外 内 存 来 删 除 此字 符 串 对 象 的 额 外 开 销
LockBuffer 使 引 用 计 数 无 效 并 保 护 缓 冲 区 内 的 数 据
UnlockBuffer 使 引 用 计 数 有 效 并 释 放 缓 冲 区 中 的 数 据
AllocSysString 由 CString 数 据 分 配 一 个 BSTR
SetSysString 使 用 CString 对 象 中 的 数 据 来 设 置 一 个 已 存 在 的
BSTR
LoadString 从 一 个 W indows 资 源 中 加 载 一 个 已 经 存 在 的 CString
对 象
AnsiToOem 实 现 由 ANSI 字 符 集 到 OEM 字 符 集 的 对 应 转 换
OemToAnsi 实 现 由 OEM 字 符 集 到 ANSI 字 符 集 的 对 应 转 换
成 员 函 数
CString::AllocSysString
BSTR AllocSysString ( ) const; throw( CMemoryException );
返 回 值
指 向 新 分 配 的 字 符 串 。
说 明
此 成 员 函 数 分 配 一 个 BSTR 类 型 的 新 的 OLE 的 兼 容 Automation 字 符 串 , 并 把包 括 空 结 束 符 在 内 的 此 CString 对 象 的 内 容 拷 贝 到 其 中 , 若 内 存 不 足 , 则 发 出CMemoryException 异 常 。 这 个 函 数 通 常 是 用 来 为 OLE 自 动 化 返 回 字 符 串 。
在 很 少 的 情 况 下 , 你 需 要 使 用 ::SysFreeString 来 重 新 分 配 此 函 数 返 回 的 字 符 串的 存 储 单 元 。
注 意 如 果 你 使 用 的 是 一 个 共 享 库 的 MFC 并 且 是 在 调 试 模 式 下 生 成 的 , 则 你 必 须 与 MFCO42D.DLL 连 接 来 获 得 这 个 函 数 。 通 过 在 STDAFX.H 文 件 中
包 括 <afxdisp.h> , 可 以 使 连 接 程 序 自 动 获 得 MFCO42D.DLL 。
有 关 W indows 中 的 OLE 分 配 函 数 的 更 多 信 息 , 参 见 “ W in32 SDK OLE 程 序 员参 考 ” 中 的 ::SysAllocString 和 ::SysFreeString。
请 参 阅 ::SysAllocString, ::SysFreeString, CMemoryException
CString::Ans iT i Oem void AnsiToOem( ); 说 明
此 成 员 函 数 将 CString 对 象 中 的 所 有 字 符 由 ANSI 字 符 集 转 换 为 OEM 字 符 集 。参 见 “ M icrosoft Visual C++6.0 参 考 库 ” 中 的 “ Microsoft Visual C++6.0 语 言 参考 ” 卷 中 的 “ ANSI 字 符 代 码 表 ” 。
请 参 阅 CString::OemToAnsi
CString::Collate
int Collate( LPCTSTR lpsz ) const;
返 回 值
如 果 两 个 字 符 串 是 一 样 的 , 则 返 回 非 零 值 ; 如 果 CString 对 象 小 于 lpsz 则 返 回值 <0 ; 如 果 此 CString 对 象 大 于 lpsz 则 返 回 值 >0 。
参 数
lpsz
要 用 于 比 较 的 另 一 个 字 符 串 。
此 成 员 函 数 通 过 使 用 通 用 文 本 函 数 _tcscoll 来 比 较 这 个 CString 对 象 和 另 一 个 字符 串 。 此 通 用 文 本 函 数 _tcscoll 是 在 TCHAR.H 中 定 义 的 , 根 据 在 编 译 时 设 置 的字 符 来 与 strcoll , wcscoll , 或 _mbscoll 对 应 。 这 些 函 数 的 每 一 个 都 根 据 当 前 使用 的 代 码 页 来 进 行 一 次 区 分 大 小 写 的 比 较 。 更 多 的 信 息 , 参 见“ M icrosoft Visual C++ 6.0 运 行 时 库 参 考 ” 中 的 strca t, wcsca t, _mbsca t。
请 参 阅 CString::Compare, CString::CompareNoCase
CString::CollateNoCase
int CollateNocase( LPCTSTR lpsz ) const;
如 果 字 符 串 是 一 样 的( 不 区 分 大 小 写 )则 返 回 非 零 值 ;如 果 CString 对 象 小 于 lpsz
( 不 区 分 大 小 写 ) 则 返 回 值 <0 , 如 果 CString 对 象 大 于 lpsz ( 不 区 分 大 小 写 ) 则 返 回 值 >0 。
参 数
lpsz
指 向 要 用 于 比 较 的 另 一 个 字 符 串 的 指 针 。
说 明
此 成 员 函 数 通 过 使 用 通 用 文 本 函 数 _tcscoll 来 比 较 这 个 CString 对 象 和 另 一 个 字符 串 。 此 通 用 文 本 函 数 _tcscoll 是 在 TCHAR.H 中 定 义 的 , 根 据 在 编 译 时 设 置 的字 符 来 与 stricoll , wcsicoll, 或 _mbsicoll 对 应 。 这 些 函 数 的 每 一 个 都 根 据 当 前
使 用 的 代 码 页 来 进 行 一 次 不 区 分 大 小 写 的 比 较 。
请 参 阅 CString::Collate, CString::CompareNoCase, CString::Compare
CString::Compare
int Compare( LPCTSTR lpsz ) const;
返 回 值
如 果 字 符 串 是 一 样 的 则 返 回 非 零 值 ; 如 果 CString 对 象 小 于 lpsz 则 返 回 值 <0 , 如 果 CString 对 象 大 于 lpsz 则 返 回 值 >0 。
参 数
lpsz
要 用 于 比 较 的 另 一 个 字 符 串 。
说 明
此 成 员 函 数 通 过 使 用 通 用 文 本 函 数 _tcscmp 来 比 较 这 个 CString 对 象 和 另 一 个 字符 串 。 此 通 用 文 本 函 数 _tcscmp 是 在 TCHAR.H 中 定 义 的 , 根 据 在 编 译 时 设 置的 字 符 来 与 strcm p, wcscm p, 或 _mbscmp 对 应 。 这 些 函 数 的 每 一 个 都 根 据 当 前使 用 的 代 码 页 来 进 行 一 次 区 分 大 小 写 的 比 较 , 而 且 不 会 被 现 场 影 响 。 更 多 的 信息 ,参 见“ Microsoft Visual C++ 6.0 运 行 库 参 考 ”中 的 strcm p,wcscm p,_mbscm p。
示 例
下 面 的 例 子 说 明 了 如 何 使 用 CString::Compare 。
// CString::Compare 示例CString s1( "abc" ); CString s2( " abd " );
ASSERT( s1.Compare( s2 ) == -1 ); // 与另一个 CString 比较。
ASSERT( s1.Compare( " ab e" ) == -1 ); // 与 LPTSTR 字符串比较。
请 参 阅 CString::CompareNoCase ,CString::Collate,CString::CollateNoCase
CString::CompareNoCase
int CompareNoCase( LPCTSTR lpsz ) const;
返 回 值
如 果 字 符 串 是 一 样 的( 不 区 分 大 小 写 )则 返 回 非 零 值 ;如 果 CString 对 象 小 于 lpsz
( 不 区 分 大 小 写 ) 则 返 回 值 <0 , 如 果 CString 对 象 大 于 lpsz ( 不 区 分 大 小 写 ) 则 返 回 值 >0 。
说 明
此 成 员 函 数 通 过 使 用 通 用 文 本 函 数 _tcsicmp 来 比 较 这 个 CString 对 象 和 另 一 个字 符 串 。 此 通 用 文 本 函 数 _tcsicmp 是 在 TCHAR.H 中 定 义 的 , 根 据 在 编 译 时 设
置 的 字 符 来 与 _ stricm p , _ wcsicm p, 或 _mbsicmp 对 应 。 这 些 函 数 的 每 一 个 都 根据 当 前 使 用 的 代 码 页 来 进 行 一 次 区 分 大 小 写 的 比 较 , 而 且 不 会 被 现 场 影 响 。 更多 的 信 息 ,参 见“ M icrosoft Visual C++ 6.0 运 行 库 参 考 ”中 的 _stricm p,_wcsicm p,
_mbsicm p。
示 例
下 面 的 例 子 说 明 了 如 何 使 用 CString::CompareNoCase 。
// CString::CompareNoCase 示例
CString s1( "abc" ); CString s2( "ABD" );
ASSERT( s1.CompareNoCase( s2 ) == -1 ); // 与一个 CString 比较。
ASSERT( s1.Compare( "ABE" ) == -1 ); // 与 LPTSTR 字符串比较。
请 参 阅 CString::Compare, CString::Collate ,Cstring::CollateNoCase
CString::CString
CString( );
CString( const CString& stringSrc ); throw( CMemoryException );
CString( TCHAR ch, int nRepeat = 1 ); throw( CMemoryException );
CString( LPCTSTR lpch , int nLength ); throw( CMemoryException );
CString( const unsigned char* psz ); throw( CMemoryException );
CString( LPC W STR lpsz ); throw( CMemoryException );
CString( LPCSTR lpsz );
throw( CMemoryException );
参 数
stringSrc
一 个 已 经 存 在 的 CString 对 象 , 它 要 被 拷 贝 到 此 CString 对 象 中 。
ch
要 被 重 复 nRepeat 次 的 单 个 字 符 。
nRepeat
要对 ch 重 复 的 次 数 。
lpch
- 个 指 向 字 符 数 组 的 指 针 , 该 字 符 数 组 的 长 度 是
nLength , 不 包 括 结 尾 的
空 字 符 。
nLength
pch 中 的 字 符 的 个 数 。
psz
一 个 要 被 拷 贝 到 此 CString 对 象 中 去 的 以 空 字 符 结 尾 的 字 符 串 。
lpsz
- 个 要 被 拷 贝 到 此 CString 对 象 中 去 的 以 空 字 符 结 尾 的 字
符 串 。
说 明
这 些 构 造 函 数 的 每 一 个 都 用 来 以 指 定 的 数 据 初 始 化 一 个 新 的 CString 对 象 。
由 于 构 造 函 数 是 将 输 入 数 据 拷 贝 到 新 分 配 的 存 储 区 , 所 以 你 应 该 注 意 可 能 会 导致 的 内 存 异 常 。 注 意 , 这 些 构 造 函 数 中 的 某 些 函 数 的 作 用 相 当 于 一 个 转 换 函 数 。这 就 允 许 你 使 用 替 换 物 , 例 如 在 一 个 需 要 CString 对 象 的 地 方 用 一 个 LPTSTR 来 代 替 。
此 构 造 函 数 的 某 几 种 形 式 具 有 特 殊 的 目 的 :
-
CString( LPCSTR lpsz ) 从 一 个 ANSI 字 符 串 构 造 一 个 Unicode
CString。你 可 以 象 下 面 的 例 子 那 样 用 这 个 函 数 来 加 载 一 个 字 符 串 资 源 。
-
CString( LPC W STR lpsz ) 从 一 个 Unicode 字 符 串 构 造 一 个
CString。
-
CString( const unsigned char* psz ) 从 一 个 指 向 unsigned char
的 指 针 构 造 一
个 CString 。
想 了 解 更 多 的 信 息 , 请 参 阅 “ Visual C++ 程 序 员 指 南 ” 随 机 文 中 的“ String:CString Exception Cleanup ” 一 节 。
示 例
下 面 的 例 子 说 明 了 如 何 使 用 CString::CString。
// CString::CString 示例
CString s1; // 空字符串
CString s2( "cat" ); // 从一个文字的 C 字符串
CString s3 = s2; // 拷贝构造函数
CString s4( s2 + " " + s3 ); // 从一个字符串表达式
CString s5( 'x' ); // s5 = "x"
CString s6( 'x', 6 ); // s6 = "xxxxxx"
CString s7((LPCSTR)ID_FILE_NEW); // s7 = "Create a new document" CString city = "Philadelphia"; // 不是赋值操作符
请 参 阅 CString::operator =
CString::Delete
int Delete( int nIndex , int nCount = 1); throw( CMemoryException ) ;
返 回 值
返 回 已 改 变 的 字 符 串 的 长 度 。
参 数
nIndex
要 删 除 的 第 一 个 字 符 的 索 引 。
nCoun t
要 删 除 的 字 符 数 。
说 明
此 成 员 函 数 用 来 从 一 个 字 符 串 中 从 nIndex 开 始 的 地 方 删 除 一 个 或 多 个 字 符 。 如果 nCount 比 此 字 符 串 还 要 长 , 则 字 符 串 的 其 余 部 分 都 将 被 删 除 。
示 例
// 下 面 的 例 子 说 明 了 如 何 使 用 CString::Delete 。
str2 = “ Hockey is best!” ;
printf( “ Before: %s\n, (LPCTSTR) str2 ); int n = str2.Delete(6, 3 );
printf( “ After: %s/n ” , (LPCTSTR) str2 ); ASSERT( n == str2.Getlength ( ) );
// 这 些 代 码 产 生 下 面 的 删 除 行 :
Before: Hockey is best!
After: Hockey best!
请 参 阅 CString::Insert
CString::Empty void Empty( ); 说 明
此 成 员 函 数 用 来 使 CString 对 象 成 为 一 个 空 字 符 串 , 并 释 放 相 应 的 内 存 。
更 多 的 信 息 ,参 见“ V isual C++ 程 序 员 指 南 ”中 的“ 字 符 串 : CString 异 常 清 除 ”。
示 例
下 面 的 例 子 说 明 了 如 何 使 用 CString::Empty 。
// CString::Empty 示例
CString s( "abc" );
s.Empty();
ASSERT( s.GetLength( ) == 0 );
请 参 阅 CString::IsEmpty
CString::Find
int Find( TCHAR ch ) const;
int Find( LPCTSTR lpszSub ) const; int Find( TCHAR ch, int nStart ) const;
int Find( LPCTSTR lpszSub , int nStart ) const;
返 回 值
返 回 此 CString 对 象 中 与 需 要 的 子 字 符 串 或 字 符 匹 配 的 第 一 个 字 符 的 从 零 开 始的 索 引 ; 如 果 没 有 找 到 子 字 符 串 或 字 符 则 返 回 -1 。
参 数
ch
要 搜 索 的 单 个 字 符 。
lpszSub
要 搜 索 的 子 字 符 串 。
nStart
字 符 串 中 开 始 搜 索 的 字 符 的 索 引 ,如 果 是 0 ,则 是 从 头 开 始 搜 索 。如 果 nStart
不 是 0 , 则 位 于 nStart 处 的 字 符 不 包 括 在 搜 索 之 内 。
pstr
指 向 要 搜 索 的 字 符 串 的 指 针 。
说 明
此 成 员 函 数 用 来 在 此 字 符 串 中 搜 索 子 字 符 串 的 第 一 个 匹 配 的 字 符 。 函 数 的 重 载可 以 接 收 单 个 字 符 ( 类 似 于 运 行 时 函 数 strchr) 和 字 符 串 ( 类 似 于 strstr ) 。
示 例
//下 面 演 示 第 一 个 例 子
// CString::Fin d( TCHAR ch ) CString s( "abcdef" ); ASSERT( s.Find( 'c' ) == 2 );
ASSERT( s.Find( "de" ) == 3 );
// 下 面 演 示 第 二 个 例 子
// Cstring::Find(TCHAR ch,int nStart) Cstring str(“ The stars are aligned ” ); Ing n = str.Find( 'e ',5);
ASSERT(n == 12)
请 参 阅 CString::ReverseFind, CString::FindOneOf
CString::FindOneOf
int FindOneOf( LPCTSTR lpszCharSet ) const;
返 回 值
返 回 此 字 符 串 中 第 一 个 在 lpszCharSet 中 也 包 括 的 字 符 的 从 零 开 始 的 索 引 。
参 数
lpszCharSet
包 含 用 于 匹 配 字 符 的 字 符 串 。
说 明
此 成 员 函 数 在 此 字 符 串 中 搜 索 与 lpszCharSet 中 任 意 字 符 匹 配 的 第 一 个 字 符 。
示 例
下 面 的 例 子 说 明 了 如 何 使 用 CString::FindOneO f。
// CString::FindOneOf 示 例
CString s( "abcdef" );
ASSERT( s.FindOneOf( "xd" ) == 3 ); // 'd' is first match.
请 参 阅 CString::Find
CString::Format
void Format( LPCTSTR lpszFormat , ... ); void Format( UINT nFormatID, ... );
参 数
lpszFormat
一 个 格 式 控 制 字 符 串 。
nFormatID
包 含 格 式 控 制 字 符 串 的 字 符 串 资 源 标 识 符 。
说 明
此 成 员 函 数 用 来 将 格 式 化 数 据 写 入 一 个 CString 中 , 其 方 法 就 像 sprintf 函 数 向一 个 C -风 格 的 字 符 数 组 中 格 式 化 输 出 数 据 一 样 。 这 个 成 员 函 数 在 CString 中格式 化 并 存 储 一 系 列 字 符 和 值 。 根 据 lpszFormat 中 指 定 的 格 式 或 nFormatID 标识的 字 符 串 资 源 , 函 数 中 的 每 一 个 可 选 参 数 ( 如 果 有 ) 都 被 转 换 并 输 出 。
如 果 此 字 符 串 对 象 本 身 是 作 为 Format 的 一 个 参 数 , 则 调 用 将 失 败 。 例 如 象 下 面的 代 码 :
CString str = “ Some Data ” ;
str.Format( “ %s%d ” ,str, 123); //注意:在参数列表中也使用了 str 。
将 导 致 不 可 预 期 的 结 果 。
当 你 传 递 一 个 字 符 串 作 为 一 个 可 选 择 的 参 数 时 , 你 必 须 显 式 地 将 它 转 换 为
LPCTSTR 。 这 个 格 式 与 printf 函 数 中 的 格 式 参 数 具 有 相 同 的 形 式 和 函 数 。 ( 有
关 格 式 和 参 数 的 描 述 ,参 见“ Microsofr Visual C++ 6.0 运 行 库 参 考 ”中 的 printf 。) 在 被 写 的 字 符 串 结 尾 将 添 加 一 个 空 字 符 。
更 多 的 信 息 , 参 见 “ Microsofr Visual C++ 6.0 运 行 时 库 参 考 ” 中 的 sprintf 。
请 参 阅 CString::GetBuffer,CString::FormatV
CString::FormatV
void FormatV( LPCTSTR lpszFormat , va _list argList );
参 数
lpszFormat
一 个 格 式 控 制 字 符 串 。
argList
要 传 递 的 参 数 列 表 。
此 成 员 函 数 用 来 将 格 式 化 数 据 和 一 个 参 数 变 量 列 表 写 入 一 个 CString 中 , 其 方法 就 像 vsprintf 函 数 向 一 个 C - 风 格 的 字 符 数 组 中 格 式 化 输 出 数 据 一 样 。 这 个 成员 函 数 在 CString 中 格 式 化 并 存 储 一 系 列 字 符 和 值 。 根 据 lpszFormat 中 指 定 的格 式 , 函 数 中 的 每 一 个 可 选 参 数 都 被 转 换 并 输 出 。
如 果 此 字 符 串 对 象 本 身 是 作 为 FormatV 的 一 个 次 数 , 则 调 用 将 失 败 。 例 如 象 下面 的 代 码 :
CString str = “ Some Data ” ;
str.FormatV(“ %s% d ” ,str, 123); //注意:在次数列表中也使用了 str。
将 导 致 不 可 预 期 的 结 果 。
更 多 的 信 息 , 参 见 “ Microsoft V isual C++ 6.0 运 行 库 参 考 ” 中 的 vsprintf 。
// 使用 CString::FormatV ,你可以像下面这样来编写函数:
void WriteLogEntry( CStdioFile& refFile, LPCTSTR pstrFormat, ... )
{
CTime timeWrite;
timeWrite = CTime:GetCurrentTime( );
// 输出时间
CString str = timeWrite.Format ( “ %d %b %y %H:%M:%S – ” ); refFile.Write( str, str.GetLength( ));
// 格式化并输出给定的数据
va_list args;
va_start( args, pstrFormat ); str.FormatV( pstrFormat, args ); refFile.Write( str, str.GetLength( ) );
// 插入一个换行符refFile.Write( “ \n ” , 1 ); return;
}
你 可 以 用 任 意 个 数 的 参 数 来 调 用 上 面 的 函 数 , 例 如 :
WriteLogEntry( fileLog , “ Program started ” ); WriteLogEntry( fileLog , “ Processed %d bytes ” 91341 );
WriteLogEntry( fileLog , “ %d error(s) found in %d line(s)” , 10, 1351 ); WriteLogEntry( fileLog , “ Program completed ” );
上 面 的 例 子 将 把 输 出 添 加 到 你 的 fileLog 文 件 , 就 像 下 面 给 出 的 一 样 :
17 Apr 97 12:34:53 – Program started
17 Apr 97 12:34:59 – Processed 91341 bytes
17 Apr 97 12:35:22 – 10 error(s) found in 1351 line(s)
17 Apr 97 12:35:23 – Program completed
请 参 阅 CString::Format, va_start
CString::FormatMessage
void FormatMessage( LPCTSTR lpszForma t, ... ); void FormatMessage( UINT nFormatID , ... );
参 数
lpszFormat
指 向 格 式 控 制 字 符 串 。 它 将 被 扫 描 来 进 行 插 入 , 从 而 进 行 格 式 化 。 这 个格 式 字 符 串 类 似 于 运 行 时 函 数 pritf-style 格 式 字 符 串 , 除 了 这 个 字 符 串 允许 参 数 可 以 按 任 意 顺 序 插 入 。
nFormatID
包 含 还 没 有 格 式 化 的 消 息 文 本 的 字 符 串 资 源 标 识 符 。
说 明
此 成 员 函 数 用 来 格 式 化 一 个 消 息 字 符 串 。 此 函 数 需 要 一 个 消 息 定 义 作 为 输 入 。该 消 息 定 义 是 由 lpszFormat 决 定 的 , 或 者 是 来 自 由 nFormatID 标 识 的 字 符 串 资源 。 函 数 将 这 个 格 式 化 的 消 息 文 本 拷 贝 到 CString 中 , 如 果 需 要 的 话 就 处 理 任何 嵌 入 的 插 入 顺 序 。
每 一 次 插 入 都 必 须 有 相 应 的 参 数 跟 随 lpszFormat 或 nFormatID 参 数 。 在 消 息 文本 中 , 为 了 动 态 格 式 化 消 息 , 要 支 持 几 个 转 义 序 列 。 有 关 这 些 转 义 序 列 的 描 述和 它 们 的 意 义 , 参 见 “ W in32 SDK 程 序 员 参 考 ” 中 的 W indows::FormatMessage 函 数 。
请 参 阅 ::FormatMessage,CString::LoadString,CString::Format
CString::FreeExtra
void FreeExtra( );
说 明
此 成 员 函 数 用 来 释 放 原 先 被 此 字 符 串 分 配 的 但 不 再 使 用 的 额 外 的 内 存 。 这 将 减小 此 字 符 串 的 内 存 的 额 外 开 销 。 此 函 数 按 GetLength 返 回 的 准 确 长 度 来 重 新 分配 缓 冲 区 。
CString::GetAt
TCHAR GetAt( int nIndex ) const;
返 回 值
返 回 一 个 包 含 字 符 串 中 的 指 定 位 置 的 字 符 串 的 TCHAR 。
参 数
nIndex
CString 对 象 中 的 某 个 字 符 的 从 零 开 始 的 索 引 。 nIndex 参 数 必 须 大 于 或 等于 0 , 并 小 于 GetLength 函 数 的 返 回 值 。 Microsoft 基 础 类 库 的 测 试 版 验证 nIndex 的 边 界 ; 但 是 发 行 版 不 验 证 。
说 明
你 可 以 把 一 个 CString 对 象 看 作 是 一 个 字 符 数 组 。 GetAt 成 员 函 数 返 回 一 个 由 一个 索 引 号 指 定 的 单 个 字 符 。 重 载 的 下 标 ( []) 是 GetAt 常 用 的 代 用 符 。
示 例
下 面 的 例 子 说 明 了 如 何 使 用 CString::GetA t。
// CString::GetAt 示 例
CString s( "abcdef" ); ASSERT( s.GetAt(2) == 'c' );
请 参 阅 CString::GetAt, CString::GetLength, CString::operator []
CString::GetBuffer
LPTSTR GetBuffer( int nMinBufLength );
throw( CMemoryException );
返 回 值
一 个 指 向 对 象 的 ( 以 空 字 符 结 尾 的 ) 字 符 缓 冲 区 的 LPTSTR 指 针 。
参 数
nMinBufLength
字 符 缓 冲 区 的 以 字 符 数 表 示 的 最 小 容 量 。 这 个 值 不 包 括 一 个 结 尾 的 空 字 符的 空 间 。
说 明
此 成 员 函 数 返 回 一 个 指 向 CString 对 象 的 内 部 字 符 缓 冲 区 的 指 针 。 返 回 的
LPTSTR 不是 const , 因 此 可 以 允 许 直 接 修 改 CString 的 内 容 。
如 果 你 使 用 由 GetBuffer 返 回 的 指 针 来 改 变 字 符 串 的 内 容 , 你 必 须 在 使 用 其 它的 CString 成 员 函 数 之 前 调 用 ReleaseBuffer 函 数 。
在 调 用 ReleaseBuffer 之 后 , 由 GetBuffer 返 回 的 地 址 也 许 就 无 效 了 , 因 为 其 它的 CString 操 作 可 能 会 导 致 CString 缓 冲 区 被 重 新 分 配 。 如 果 你 没 有 改 变 此CString 的 长 度 , 则 缓 冲 区 不 会 被 重 新 分 配 。
当 此 CString 对 象 被 销 毁 时 , 其 缓 冲 区 内 存 将 被 自 动 释 放 。
注 意 , 如 果 你 自 己 知 道 字 符 串 的 长 度 , 则 你 不 应 该 添 加 结 尾 的 空 字 符 。 但 是 , 当 你 用 ReleaseBuffer 来 释 放 该 缓 冲 区 时 , 你 必 须 指 定 最 后 的 字 符 串 长 度 。 如 果你 添 加 了 结 尾 的 空 字 符 , 你 应 该 给 ReleaseBuffer 的 长 度 参 数 传 递 -1 , ReleaseBuffer 将 对 该 缓 冲 区 执 行 strlen 来 确 定 它 的 长 度 。
示 例
下 面 的 例 子 说 明 了 如 何 用 CString::GetBuffer。
// CString::GetBuffer 例子
CString s( "abcd" ); #ifdef _DEBUG
afxDump << "CString s " << s << "\n"; #endif
LPTSTR p = s.GetBuffer( 10 );
strcpy( p, "Hello" ); // 直接访问 CString 对象。
s.R eleaseBuffer( ); #ifdef _DEBUG
afxDump << "CString s " << s << "\n"; #endif
请 参 阅 CString::GetBufferSetLength, CString::ReleaseBuffer
CString::GetBufferSetLength
LPTSTR GetBufferSetLength( int nNewLength );
throw( CMemoryException );
返 回 值
返 回 一 个 指 向 对 象 的 ( 以 空 字 符 结 尾 的 ) 字 符 缓 冲 区 的 LPTSTR 指 针 。
参 数
nNewLength
此 CString 字 符 缓 冲 区 的 以 字 符 数 表 示 的 精 确 容 量 。
说 明
此 成 员 函 数 返 回 一 个 指 向 CString 对 象 的 内 部 字 符 缓 冲 区 的 指 针 , 如 果 需 要 的话 , 切 断 或 增 长 缓 冲 区 的 长 度 以 精 确 匹 配 由 nNewLength 指 定 的 长 度 。 返 回 的LPTSTR 不是 const , 因 此 可 以 允 许 直 接 修 改 CString 的 内 容 。
如 果 你 使 用 由 GetBuffer 返 回 的 指 针 来 改 变 字 符 串 的 内 容 , 你 必 须 在 使 用 其 它的 CString 成 员 函 数 之 前 调 用 ReleaseBuffer 函 数 。
在 调 用 ReleaseBuffer 之 后 , 由 GetBuffer 返 回 的 地 址 也 许 就 无 效 了 , 因 为 其 它的 CString 操 作 可 能 会 导 致 CString 缓 冲 区 被 重 新 分 配 。 如 果 你 没 有 改 变 此CString 的 长 度 , 则 缓 冲 区 不 会 被 重 新 分 配 。
当 此 CString 对 象 被 销 毁 时 , 其 缓 冲 区 内 存 将 被 自 动 释 放 。
注 意 , 如 果 你 自 己 知 道 字 符 串 的 长 度 , 则 你 不 应 该 添 加 结 尾 的 空 字 符 。 但 是 , 当 你 用 ReleaseBuffer 来 释 放 该 缓 冲 区 时 , 你 必 须 指 定 最 后 的 字 符 串 长 度 。 如 果你 添 加 了 结 尾 的 空 字 符 , 你 应 该 给 ReleaseBuffer 的 长 度 参 数 传 递 -1 , ReleaseBuffer 将 对 该 缓 冲 区 执 行 strlen 来 确 定 它 的 长 度 。
有 关 引 用 计 数 的 更 多 信 息 , 参 见 下 面 的 文 章 :
-
“ W in 32 SDK 程 序 员 参 考 ” 中 的“ 通 过 引 用 计 数 来 管 理 对
象 的 生 命 周 期 ” 。
-
“ W in 32 SDK 程 序 员 参 考 ” 中 的 “ 实 现 引 用 计 数 ” 。
-
“ W in 32 SDK 程 序 员 参 考 ” 中 的 “ 管 理 引 用 计 数 的 规 则 ”
。
请 参 阅 CString::GetBuffer, CString::ReleaseBuffer
CString::GetLength int GetLength( ) const; 返 回 值
返 回 字 符 串 中 的 字 节 计 数 。
说 明
此 成 员 函 数 用 来 获 取 这 个 CString 对 象 中 的 字 节 计 数 。 这 个 计 数 不 包 括 结 尾 的
空 字 符 。
对 于 多 字 节 字 符 集 ( MBC S ) , GetLength 按 每 一 个 8 位 字 符 计 数 ; 即 , 在 一 个多 字 节 字 符 中 的 开 始 和 结 尾 字 节 被 算 作 两 个 字 节 。
示 例
下 面 的 例 子 说 明 了 如 何 使 用 CString::GetLength 。
// CString::GetLength 示例
CString s( "abcdef" );
ASSERT( s.GetLength() == 6 );
请 参 阅 CString::IsEmpty
CString::Insert
int Insert( int nIndex , TCHAR ch ); throw( CMemoryException );
int Insert( int nIndex , LPCTSTR pstr ); throw( CMemoryException );
返 回 值
返 回 被 改 变 的 字 符 串 的 长 度 。
参 数
nIndex
某 个 字 符 的 索 引 , 在 这 个 字 符 的 前 面 将 要 进 行 插 入 操 作 。
ch
要 插 入 的 字 符 。
pstr
一 个 指 向 要 被 插 入 的 子 字 符 串 的 指 针 。
说 明
此 成 员 函 数 用 来 在 字 符 串 中 的 给 定 索 引 处 插 入 一 个 单 个 字 符 或 一 个 子 字 符 串 。nIndex 参 数 标 识 了 将 要 被 移 走 以 给 字 符 或 子 串 空 间 的 第 一 个 字 符 。 如 果 nIndex 是 零 , 则 插 入 将 方 式 在 这 个 字 符 串 之 前 。 如 果 nIndex 大 于 字 符 串 的 长 度 , 则 函数 将 把 当 前 的 字 符 串 与 由 ch 或 pstr 指 定 的 新 字 符 串 连 接 起 来 。
示 例
// 下面的例子说明了如何使用 CString::Insert 。CString str( “ HockeyB est ” );
int n = str.Insert( 6, “ is ” ); ASSERT( n == str.GetLength( ) );
printf( “ 1: %s\n ” , ( LPCTSTR ) str ); n = str.Insert( 6, ' ' );
ASSERT( n == str.GetLength( ) ); printf ( “ 2: %s\n ” , (LPCTSTR) STR );
n = str.Insert(555, ‘1 ’ );
ASSERT( n == str.GetLength ( ) ); printf ( “ 3: %s\n ” , ( LPCTSTR ) str );
// 上面的代码将产生下面这些输出行:
-
Hockeyis Best
-
Hockey is Best
-
Hockey is Best!
请 参 阅 CString::Delete, CString::operator +
CString::IsEmpty BOOL IsEmpty( ) const; 返 回 值
如 果 CString 对 象 的 长 度 为 0 , 则 返 回 非 零 值 ; 否 则 返 回 0 。
说 明
此 成 员 函 数 用 来 测 试 一 个 CString 对 象 是 否 是 空 的 。
示 例
下 面 的 例 子 说 明 了 如 何 使 用 CString::IsEmpty。
// CString::IsEmpty 示例
CString s;
ASSERT( s.IsEmpty() );
请 参 阅 CString::GetLength
CString::Left
CString Left( int nCount ) const; throw( CMemoryException );
返 回 值
返 回 一 个 包 含 指 定 范 围 字 符 的 拷 贝 的 CString 对 象 。 注 意 , 返 回 的 CString 对象可 能 是 空 的 。
参 数
nCount
要 从 这 个 CString 对 象 中 提 取 的 字 符 数 。
说 明
此 成 员 函 数 用 来 从 此 CString 对 象 中 提 取 最 前 面 的 nCount 个 字 符 , 并 返 回 被 提取 的 子 字 符 串 的 拷 贝 。 如 果 nCount 超 过 了 字 符 串 的 长 度 , 则 整 个 字 符 串 都 被提 取 。 Left 类 似 与 Basic LEFT $函数 ( 除 了 索 引 是 从 零 开 始 的 ) 。
对 于 多 字 节 字 符 集 ( MBC S ) , nCount 指 的 是 每 8 位 字 符 的 个 数 , 即 , 在 一 个
多 字 节 字 符 中 开 始 和 结 尾 字 节 被 算 作 两 个 字 符 。
示 例
下 面 的 例 子 说 明 了 如 何 使 用 CString::Left。
// CString::Left 示例
CString s( _T("abcdef") ); ASSERT( s.Left(2) == _T("ab") );
请 参 阅 CString:: M id, CString::Right
CString::LoadString
BOOL LoadString( UINT nID ); throw( CMemoryException );
返 回 值
如 果 加 载 资 源 成 功 则 返 回 非 零 值 ; 否 则 返 回 0 。
参 数
nID
一个 Windows 字 符 串 资 源 ID 。
说 明
此 成 员 函 数 用 来 读 取 一 个 由 nID 标 识 的 W indows 字 符 串 资 源 , 并 放 入 一 个 已 有的 CString 对 象 中 。
示 例
下 面 的 例 子 说 明 了 如 何 使 用 CString::LoadString 。
// CString::LoadString 示例
#define IDS_FILENOTFOUND 1
CString s;
if (! s.LoadString( IDS_FILENOTFOUND ))
{
AfxMessageBox("Error Loading String: IDS_FILENOTFOUND");
...
}
CString::LockBuffer LPTSTR LockBuffer( ); 返 回 值
返 回 一 个 指 向 CString 对 象 的 指 针 , 或 者 是 一 个 以 NULL 结 尾 的 字 符 串 。
说 明
此 成 员 函 数 用 来 加 锁 缓 冲 区 内 的 一 个 字 符 串 。
通 过 调 用 LockBuffer, 可 以 创 建 一 个 字 符 串 的 拷 贝 , 然 后 将 引 用 计 数 设 置 为 -1 。当 引 用 计 数 被 设 置 为 -1 时 , 缓 冲 区 中 的 字 符 串 被 认 为 是 处 于“ 加 锁 ” 状 态 。 当
该 字 符 串 处 于 加 锁 状 态 时 , 字 符 串 被 从 两 个 方 面 得 到 保 护 :
-
没 有 其 它 的 字 符 串 能 够 获 得 对 此 加 锁 字 符 串 中 的 数 据
的 引 用 , 即 使 是 该 字符 串 被 赋 予 了 加 锁 字 符 串 。
-
加 锁 字 符 串 将 不 能 引 用 其 它 的 字 符 串 , 即 使 另 一 个 字
符 串 被 拷 贝 到 该 加 锁字 符 串 中 。
通 过 加 锁 缓 冲 区 中 的 字 符 串 , 可 以 保 证 该 字 符 串 对 缓 冲 区 的 独 占 保 持 完 整 。
在 你 完 成 了 对 LockBuffer 的 使 用 之 后 , 调 用 UnlockBuffer 来 将 该 引 用 计 数 恢 复到 1 。
有 关 引 用 计 数 的 更 多 信 息 , 参 见 下 面 的 文 章 :
-
“ W in 32 SDK 程 序 员 参 考 ” 中 的“ 通 过 引 用 计 数 来 管 理 对
象 的 生 命 周 期 ” 。
-
“ W in 32 SDK 程 序 员 参 考 ” 中 的 “ 实 现 引 用 计 数 ” 。
-
“ W in 32 SDK 程 序 员 参 考 ” 中 的 “ 管 理 引 用 计 数 的 规 则 ”
。
请 参 阅 CString::UnlockBuffer, CString::GetBuffer, CString::ReleaseBuffer
CString::MakeLower void MakeLower( ); 说 明
此 成 员 函 数 将 此 CString 对 象 转 换 为 一 个 小 写 字 符 串 。
示 例
下 面 的 例 子 说 明 了 如 何 使 用 CString::MakeLowe r。
// CString::MakeLower 示例CString s( "ABC" ); s.MakeLower();
ASSERT( s == "abc" );
请 参 阅 CString:: M akeUpper
CString::MakeReverse
void MakeReverse( );
说 明
此 成 员 函 数 将 此 CString 对 象 中 的 字 符 的 顺 序 颠 倒 过 来 。
示 例
下 面 的 例 子 说 明 了 如 何 使 用 CString::MakeReverse 。
// CString::MakeReverse 示 例
CString s( "abc" ); s.MakeReverse();
ASSERT( s == "cba" );
CString::MakeUpper
void MakeUpper( );
说 明
此 成 员 函 数 将 此 CString 对 象 转 换 为 一 个 大 写 字 符 串 。
示 例
下 面 的 例 子 说 明 了 如 何 使 用 CString::MakeUpper。
// CString::MakeUpper 示例CString s( "abc" ); s.MakeUpper();
ASSERT( s == "ABC" );
请 参 阅 CString:: M akeLower
CString::Mid
CString Mid( int nFirst ) const; throw( CMemoryException );
CString Mid( int nFirst, int nCount ) const; throw( CMemoryException );
返 回 值
返 回 一 个 包 含 指 定 范 围 字 符 的 拷 贝 的 CString 对 象 。 注 意 , 这 个 返 回 的 CString
对 象 可 能 是 空 的 。
参 数
nFirst
此 CString 对 象 中 的 要 被 提 取 的 子 串 的 第 一 个 字 符 的 从 零 开 始 的 索 引 。
nCount
要 从 此 CString 对 象 中 提 取 的 字 符 数 。 如 果 没 有 提 供 这 个 参 数 , 则 字 符 串
的 其 余 部 分 都 被 提 取 。
说 明
此 成 员 函 数 从 此 CString 对 象 中 提 取 一 个 长 度 为 nCount 个 字 符 的 子 串 ,从 nFirst
( 从 零 开 始 的 索 引 ) 指 定 的 位 置 开 始 。 此 函 数 返 回 一 个 对 所 提 取 的 字 符 串 的 拷贝 。 M id 类 似 于 Basic MID $函 数 ( 除 了 索 引 是 从 零 开 始 的 ) 。
对 于 多 字 节 字 符 集 ( MBC S ) , nCount 指 的 是 每 8 位 字 符 的 数 目 ; 也 就 是 说 , 在 一 个 多 字 节 字 符 中 开 始 和 结 尾 字 节 被 算 作 两 个 字 符 。
示 例
下 面 的 例 子 说 明 了 如 果 如 何 使 用 CString:: M id 。
// CString::Mid 示例
CString s( _T("abcdef") );
ASSERT( s.Mid( 2, 3 ) == _T("cde") );
请 参 阅 CString::Left, CString::Right
CString::OemToAnsi
void OemToAnsi( );
说 明
此 成 员 函 数 将 此 CString 对 象 中 的 所 有 字 符 由 OEM 字 符 集 转 换 成 ANSI 字 符集 。 参 见 “ Microsoft Visual C++ 6.0 库 参 考 ” 中 的 “ M icrosoft Visual C++ 6.0 语言 参 考 手 册 ” 卷 中 的 “ ANSI 字 符 代 码 表 ” 。
如 果 定 义 了 _UNICODE , 则 这 个 函 数 是 无 效 的 。
请 参 阅 CString::AnsiToOem
CString::ReleaseBuffer
void ReleaseBuffer( int nNewLength = -1 );
参 数
nNewLength
此 字 符 串 的 以 字 符 数 表 示 的 新 长 度 , 不 计 算 结 尾 的 空 字 符 。 如 果 这 个 字符 串 是 以 空 字 符 结 尾 的 , 则 参 数 的 缺 省 值 - 1 将 把 CString 的 大 小 设 置 为字 符 串 的 当 前 长 度 。
说 明
使 用 ReleaseBuffer 来 结 束 对 由 GetBuffer 分 配 的 缓 冲 区 的 使 用 。 如 果 你 知 道 缓冲 区 中 的 字 符 串 是 以 空 字 符 结 尾 的 , 则 可 以 省 略 nNewLength 参 数 。 如 果 字 符串 不 是 以 空 字 符 结 尾 的 , 则 可 以 使 用 nNewLength 指 定 字 符 串 的 长 度 。 在 调 用
ReleaseBuffer 或 其 它 CString 操 作 之 后 , 由 GetBuffer 返 回 的 地 址 是 无 效 的 。
示 例
下 面 的 例 子 说 明 了 如 何 使 用 CString::ReleaseBuffer。
// CString::ReleaseBuffer 示例
CString s; s = "abc";
LPTSTR p = s.GetBuffer( 1024 );
strcpy(p, "abc"); // 直接使用该缓冲区
ASSERT( s.GetLength() == 3 ); // 字符串长度 = 3 s.ReleaseBuffer(); // 释放多余的内存,现在 p 无效。ASSERT( s.GetLength() == 3 ); // 长度仍然是 3
请 参 阅 CString::GetBuffer
CString::Remove
int CString::Remove ( TCHAR ch );
返 回 值
返 回 从 字 符 串 中 移 走 的 字 符 数 。 如 果 字 符 串 没 有 改 变 则 返 回 零 。
参 数
ch
要 从 一 个 字 符 串 中 移 走 的 字 符 。
说 明
此 成 员 函 数 用 来 将 ch 实 例 从 字 符 串 中 移 走 。 与 这 个 字 符 的 比 较 是 区 分 大 小 写的 。
示 例
// 从一个句子中移走小写字母 'c':
CString str ( “ This is a test .” ); int n = str.Remove( 't ' ); ASSERT( n == 2 );
ASSERT( str == “ This is a es. ” );
请 参 阅 CString::Replace
CString::Replace
int Replace( TCHAR chOld , TCHAR chNew );
int Replace( LPCTSTR lpszOld , LPCTSTR lp szNew );
返 回 值
返 回 被 替 换 的 字 符 数 。 如 果 这 个 字 符 串 没 有 改 变 则 返 回 零 。
参 数
chOld
要被 chNew 替 换 的 字 符 。
chNew
要 用 来 替 换 chOld 的 字 符 。
lpszOld
- 个 指 向 字 符 串 的 指 针 , 该 字 符 串 包 含 了 要 被 lpszNew
替 换 的 字 符 。
lpszNew
- 个 指 向 字 符 串 的 指 针 , 该 字 符 串 包 含 了 要 用 来 替 换
lpszOld 的 字 符 。
说 明
此 成 员 函 数 用 一 个 字 符 替 换 另 一 个 字 符 。函 数 的 第 一 个 原 形 在 字 符 串 中 用 chNew 现 场 替 换 chOld 。 函 数 的 第 二 个 原 形 用 lpszNew 指 定 的 字 符 串 替 换 lpszOld 指 定的 子 串 。
在 替 换 之 后 , 该 字 符 串 有 可 能 增 长 或 缩 短 ; 那 是 因 为 lpszNew 和 lp sz Old 的 长 度不 需 要 是 相 等 的 。 两 种 版 本 形 式 都 进 行 区 分 大 小 写 的 匹 配 。
示 例
// 第一个例子, old 和 new 具有相同的长度。
CString strZap( “ C - - ” );
int n = strZap.Replace( '- ', '+ ' ); ASSERT( n == 2 ); ASSERT(strZap == “ C++ ” );
// 第二个例子, old 和 new 具有不同的长度。
CString strBang( “ Everybody likes ice hockey ” ); n = strBang.Replace( “ hockey ” , “ golf ” ); ASSERT( n ==1 );
n = strBang.Replace ( “ likes ” , “ plays ” ); ASSERT( n == 1 );
n = strBang.Replace( “ ice” , NULL ); ASSERT( n == 1 );
ASSERT( strBang == “ Everybody plays golg ” );
// 注意,现在在你的句子中有了一个额外的空格。
// 要移走这个额外的空格,可以将它包括在要被替换的字符串中,例如, “ ice ”。
请 参 阅 CString::Remove
CString::ReverseFind
int ReverseFind( TCHAR ch ) const;
返 回 值
返 回 此 CString 对 象 中 与 要 求 的 字 符 匹 配 的 最 后 一 个 字 符 的 索 引 ; 如 果 没 有 找到 需 要 的 字 符 则 返 回 -1 。
参 数
ch
要 搜 索 的 字 符 。
说 明
此 成 员 函 数 在 此 CString 对 象 中 搜 索 与 一 个 子 串 匹 配 的 最 后 一 个 字 符 。 此 函 数
类 似 于 运 行 时 函 数 strrchr。
示 例
// CString::ReverseFind 示例
CString s( "abcabc" );
ASSERT( s.ReverseFind( 'b' ) == 4 );
请 参 阅 CString::Find, CString::FindOneOf
CString:: Right
CString Right( int nCount ) const; throw( CMemoryException );
返 回 值
返 回 一 个 包 含 指 定 字 符 拷 贝 的 CString 对 象 。 注 意 , 这 个 返 回 的 CString 对 象 可能 是 空 的 。
nCount
要 从 这 个 CString 对 象 中 提 取 的 字 符 数 目 。
说 明
此 成 员 函 数 用 来 从 此 CString 对 象 中 提 取 最 后 ( 最 右 边 ) 的 nCount 个 字 符 , 并返 回 此 提 取 字 符 串 的 一 个 拷 贝 。 如 果 nCount 超 过 了 字 符 串 的 长 度 , 则 提 取 整个 字 符 串 。 Right 类 似 于 Basic 的 RIGHT $ 函数 ( 除 了 索 引 是 从 零 开 始 的 ) 。
对 于 多 字 节 字 符 集 ( MBC S ) , nCount 指 的 是 每 8 位 字 符 的 数 目 ; 也 就 是 说 , 在 一 个 多 字 节 字 符 中 开 始 和 结 尾 字 节 被 算 作 两 个 字 符 。
下 面 的 例 子 说 明 了 如 何 使 用 CString::Righ t。
// CString::Right 示例
CString s( _T("abcdef") ); ASSERT( s.Right(2) == _T("ef") );
请 参 阅 CString:: M id, CString::Left
CString:: SetAt
void SetAt( int nIndex , TCHAR ch );
参 数
nIndex
CString 对 象 中 的 某 个 字 符 的 从 零 开 始 的 索 引 。 nIndex 参 数 必 须 大 于 或 等于 0 , 小 于 由 Getlength 的 返 回 的 值 。 M icrosoft 基 础 类 库 的 测 试 版 本 将 检
验 nIndex 的 边 界 , 而 Release 版 本 则 不 检 验 。
ch
要 插 入 的 字 符 。
说 明
你 可 以 将 一 个 CString 对 象 看 作 是 一 个 字 符 数 组 。 SetAt 成 员 函 数 重 写 由 一 个 索引 值 指 定 的 单 个 字 符 。 如 果 索 引 超 出 了 已 有 字 符 串 的 边 界 , SetAt 不 会 扩 大 这个 字 符 串 。
请 参 阅 CString::GetAt, CString::operator [ ]
CString:: SetSysString
BSTR SetSysString( BSTR* pbstr ) const;
返 回 值
返 回 新 的 字 符 串 。
参 数
pbstr
一 个 指 向 字 符 串 的 指 针 。
说 明
此 成 员 函 数 重 新 分 配 由 pbstr 所 指 向 的 BSTR , 并 将 包 括 结 尾 的 空 字 符 在 内 的CString 对 象 中 的 内 容 拷 贝 到 该 BSTR 中 。 由 pbstr 所 引 用 的 BSTR 的 值 可 能 会发 生 变 化 。 如 果 内 存 不 足 , 此 函 数 将 抛 出 一 个 CMemoryException 异 常 。
这 个 函 数 通 常 被 用 来 为 OLE 自 动 化 改 变 通 过 引 用 传 递 的 字 符 串 的 值 。
有 关 W indows 中 的 OLE 重 分 配 函 数 的 更 多 信 息 , 参 见 “ W in32 SDK OLE 程序员 参 考 ” 中 的 ::SysReallocStringLen 和 ::SysFreeString 。
CString:: SpanExcluding
CString SpanExcluding( LPCTSTR lpszCharSet ) const; throw( CMemoryException );
返 回 值
返 回 一 个 子 字 符 串 , 该 子 串 保 存 了 在 CString 字 符 串 中 但 又 不 在 lpszCharSet 字符 集 合 中 的 字 符 , 该 子 串 以 字 符 串 的 第 一 个 字 符 作 为 开 始 , 以 在 此 字 符 串 中 发现 的 第 一 个 也 在 lpszCharSet 字 符 集 中 字 符 前 面 的 字 符 作 为 结 尾 ( 也 就 是 说 , 从此 字 符 串 的 第 一 个 字 符 开 始 , 直 到 第 一 个 也 包 括 在 lpszCharSet 字 符 集 的 字 符 为止 , 但 不 包 括 这 个 也 在 lpszCharSet 字 符 集 中 的 字 符 ) 。 如 果 CString 中 的 每 一
个 字 符 都 不 在 lpszCharSet 字 符 集 合 中 , 则 返 回 整 个 字 符 串 。
参 数
lpszCharSet
一 个 被 解 释 为 字 符 集 的 字 符 串 。
说 明
此 成 员 函 数 用 来 查 找 整 个 CString 对 象 中 的 字 符 串 , 找 出 lpszCharSet 指 定 的 字符 集 中 任 何 字 符 第 一 次 出 现 的 位 置 。 SpanExcluding 提 取 并 返 回 这 个 lpszCharSet 字 符 集 中 的 字 符 第 一 次 出 现 之 前 的 所 有 字 符 ( 换 句 话 说 , 来 自 lpszCharSet 字 符集 的 字 符 以 及 在 它 之 后 的 字 符 串 都 不 会 被 返 回 ) 。 如 果 在 此 字 符 串 中 没 有 发 现来 自 lpszCharSet 字 符 集 的 字 符 , 则 SpanExcluding 返 回 整 个 字 符 串 。
下 面 的 函 数 返 回 src 参 数 的 第 一 个 部 分 。
// 由一个分号 (;),一个逗号 ( , ) ,一个句号 ( . ) ,一个破折号 ( - ),
// 或一个冒号 ( : ) 划定界线的部分。
CString GetFirstPart( CString src)
{
return src.SpanExcluding( ";,.- :");
}
请 参 阅 CString::SpanIncluding
CString:: SpanIncluding
CString SpanIncluding( LPCTSTR lpszCharSet ) const; throw( CMemoryException );
返 回 此 字 符 串 中 的 一 个 子 字 符 串 , 该 子 串 中 的 字 符 也 在 lpszCharSet 字 符 集 中 字符 集 中 。 该 子 串 开 始 于 字 符 串 中 的 第 一 个 字 符 , 当 发 现 第 一 个 不 是 lpszCharSet 字 符 集 中 的 字 符 时 结 束 。 如 果 字 符 串 中 的 第 一 个 字 符 就 不 是 指 定 字 符 集 中 的 字符 , 则 SpanIncluding 返 回 一 个 空 的 子 字 符 串 。
参 数
lpszCharSet
一 个 被 解 释 为 字 符 集 的 字 符 串 。
说 明
此 成 员 函 数 用 来 从 字 符 串 中 提 取 字 符 , 提 取 的 子 字 符 串 开 始 于 字 符 串 中 的 第 一个 字 符 , 其 字 符 都 是 由 lpszCharSet 指 定 的 字 符 集 中 的 。 如 果 字 符 串 的 第 一 个 字
个 连 续 字 符 序 列 , 它 们 都 是 该 字 符 集 中 的 字 符 。
示 例
下 面 的 例 子 说 明 了 如 何 使 用 CString::SpanIncluding。
// CString::SpanIncluding 示例
CString str( "cabbage" );
CString res = str.SpanIncluding( "abc" ); ASSERT( res == "cabba" );
res = str.SpanIncluding( "xyz" ); ASSERT( res.IsEmpty( ) );
请 参 阅 CString::SpanExcluding
CString:: TrimLeft
void TrimLeft( );
void CString:: TrimLeft( TCHAR chTarget );
参 数
chTarget
要 被 整 理 的 目 标 字 符 。
lpszTargets
指 向 一 个 字 符 串 的 指 针 , 该 字 符 串 包 含 了 要 被 整 理 的 目 标 字 符 。
说 明
这 个 成 员 函 数 的 没 有 参 数 的 版 本 用 来 将 字 符 串 最 前 面 的 空 格 修 整 掉 。 当 在 没 有参 数 的 情 况 下 调 用 时 , TrimLeft 删 除 换 行 符 , 空 格 和 tab 字 符 。
这 个 成 员 函 数 的 需 要 参 数 的 版 本 用 来 将 一 个 特 定 的 字 符 或 一 群 特 定 的 字 符 从 字符 串 的 开 始 处 删 除 。
指 南 ” 中 的 “ 字 符 串 主 题 ” 。
请 参 阅 CString:: M id, CString::Left, CString::Right,
CString::MakeUpper, CString::MakeLower, CString::MakeReverse, CString::Format
CString:: TrimRight
void Trim Righ t( );
void CString:: Trim Right ( TCHAR chTarget ); void CString:: TrimRight( LPCTSTR lpszTargets );
参 数
chTarget
要 被 整 理 的 目 标 字 符 。
lpszTargets
说 明
这 个 成 员 函 数 的 没 有 参 数 的 版 本 用 来 将 字 符 串 最 后 面 的 空 格 修 整 掉 。 当 在 没 有参 数 的 情 况 下 调 用 时 , Trim Right 从 字 符 串 中 删 除 换 行 符 , 空 格 和 tab 字 符 。
这 个 成 员 函 数 的 需 要 参 数 的 版 本 用 来 将 一 个 特 定 的 字 符 或 一 群 特 定 的 字 符 从 字符 串 的 结 尾 处 删 除 。
示 例
CString strBefore;
CString strAfter;
strBefore = " Hockey is Best!!!! " ; strAfter = strBefore; str.TrimRight('!' );
printf ( " Before: \ " %s\" \n " ,(LPCTSTR) strBefore );
printf ( " After: \ " %s\ " \n " ,(LPCTSTR) strBefore );
strBefore = " Hockey is Best?!?!?!?!" ; strAfter = strBefore;
str.TrimRight( ‘ ?!’ );
printf ( " Before: \ " %s\" \n " ,(LPCTSTR) strBefore ); printf ( " After: \ " %s\" \n " ,(LPCTSTR) str After );
在 上 面 的 第 一 个 例 子 中 , 字 符 串“ Hockey is Best!!!! ”变成 了“ Hockey is Bes t” 。
在 上 面 的 第 二 个 例 子 中 , 字 符 串 “ Hockey is Best?!?!?!?!” 变 成 了 “ Hockey is Best ”。
更 多 的 信 息 , 参 见 “ Visual C++ 程 序 员 指 南 ” 中 的 “ 字 符 串 主 题 ” 。
请 参 阅 CString::TrimLeft, CString::Mid, CString::Left, CString::Right, CString::MakeUpper,
CString::MakeLower, CString::MakeReverse, CString::Format
CString:: UnlockBuffer void UnlockBuffer( ); 说 明
此 成 员 函 数 用 来 解 锁 先 前 通 过 调 用 LockBuffer 加 锁 的 的 缓 冲 区 。 UnlockBuffer
将 引 用 计 数 恢 复 为 1 。
CString 析 构 函 数 使 用 UnlockBuffer 来 保 证 当 析 构 函 数 被 调 用 时 缓 冲 区 不 会 被加 锁 。
请 参 阅 CString::LockBuffer, CString::GetBuffer, CString::ReleaseBuffer
操 作 符
CString::operator =
const CString& operator =( const CString& stringSrc ); throw( CMemoryException );
const CString& operator =( TCHAR ch ); throw( CMemoryException );
const CString& operator =( const unsigned char* psz );
throw( CMemoryException );
const CString& operator =( LPCWSTR lpsz ); throw( CMemoryException );
const CString& operator =( LPCSTR lpsz ); throw( CMemoryException );
说 明
这 个 CString 赋 值 操 作 符 ( = ) 用 新 的 数 据 来 初 始 化 一 个 已 经 存 在 的 CString 对
象 。 如 果 目 标 字 符 串 ( 即 左 边 的 字 符 串 ) 已 经 具 有 足 够 大 的 空 间 来 保 存 新 数 据 , 则 不 用 进 行 新 的 内 存 分 配 。 不 管 你 什 么 时 候 使 用 这 个 赋 值 操 作 符 , 都 要 小 心 可能 出 现 的 内 存 异 常 , 因 为 常 常 要 为 保 存 新 的 结 果 给 CString 对 象 分 配 内 存 。
示 例
下 面 的 例 子 说 明 了 如 何 使 用 CString::operator = 。
// CString::operator = 示例
CString s1, s2; // 空的 CString 对象
s1 = "cat" // s1 = "cat"
s2 = s1; // s1 and s2 each = "cat"
s1 = "the " + s1; // 或者是表达式
s1 = 'x'; // 或者只是单个的字符
请 参 阅 CString::CString
operator LPCTSTR ( ) const;
返 回 值
返 回 一 个 指 向 字 符 串 的 数 据 的 字 符 指 针 。
说 明
这 个 非 常 有 用 的 强 制 操 作 符 提 供 了 一 种 非 常 有 效 的 方 法 来 访 问 存 放 在 CString 对 象 中 的 以 空 字 符 结 尾 的 C 字 符 串 。 此 函 数 不 拷 贝 字 符 而 仅 返 回 一 个 指 针 。 如果 你 在 获 取 指 针 之 后 修 改 此 CString 对 象 , 则 可 能 导 致 内 存 被 重 新 分 配 , 并 使该 指 针 无 效 。
friend CArchive& operator <<( CArchive& ar , const CString& string ); throw( CArchiveException );
friend CArchive& operator >>( CArchive& ar , CString& string ); throw( CArchiveException );
friend CDumpContext& operator <<( CDumpContext& dc, const CString& string );
说 明
CString 插 入 操 作 符 ( << ) 支 持 向 一 个 存 档 进 行 诊 断 转 储 和 存 储 。 提 取 操 作 符支 持 从 一 个 文 档 中 进 行 装 入 。
CDumpContext 操 作 符 只 有 在 M icrosoft 基 础 类 库 的 调 试 版 中 才 有 效 。
示 例
下 面 的 例 子 说 明 了 如 何 使 用 CString::operator <<, >> 。
// CString::operator <<, >>示例
extern CArchive ar;
CString s( "abc" );
#ifdef _DEBUG
afxDump << s; // Prints the value (abc) afxDump << &s; // Prints the address
#endif
if( ar.IsLoading() ) ar >> s;
else
ar << s;
请 参 阅 CDumpContext
CString::operator +
friend CString operator +( const CString& string1 , const CString& string2 ); throw( CMemoryException );
friend CString operator +( const CString& string , TCHAR ch ); throw( CMemoryException );
friend CString operator +( TCHAR ch , const CString& string );
throw( CMemoryException );
friend CString operator +( const CString& string, LPCTSTR lpsz ); throw( CMemoryException );
friend CString operator +( LPCTSTR lpsz , const CString& string ); throw( CMemoryException );
返 回 值
返 回 一 个 CString 对 象 , 该 对 象 是 此 连 接 操 作 的 临 时 结 果 。 这 个 返 回 值 使 得 在一 个 表 达 式 中 组 合 多 次 连 接 成 为 可 能 。
参 数
string, string1 , string2
要 连 接 的 CString 对 象 。
ch
将 被 连 接 到 一 个 字 符 串 之 后 的 或 将 在 其 后 连 接 一 个 字 符 串 的 字 符 。
lpsz
指 向 一 个 以 空 字 符 结 尾 的 字 符 串 的 指 针 。
说 明
此 + 操 作 符 将 两 个 字 符 串 连 接 起 来 并 返 回 一 个 CString 对 象 。 两 个 参 数 中 的 一 个必 须 是 一 个 CString 对 象 , 而 另 一 个 可 以 是 指 向 字 符 的 指 针 或 是 一 个 字 符 。 不管 你 什 么 时 候 使 用 这 个 连 接 操 作 符 , 都 要 小 心 可 能 出 现 的 内 存 异 常 , 因 为 为 了保 存 这 个 临 时 结 果 常 常 要 分 配 新 内 存 。
示 例
下 面 的 例 子 说 明 了 如 何 使 用 CString::operator + 。
// CString::operator + 示例CString s1( "abc" ); CString s2( "def" );
ASSERT( (s1 + s2 ) == "abcdef" ); CString s3;
s3 = CString( "abc" ) + "def" ; // Correct s3 = "abc" + "def";
// 错了!第一个参数必须是一个 CString 。
请 参 阅 CString::operator +=
CString::oeprator +=
const CString& operator +=( const CString& string ); throw( CMemoryException );
const CString& operator +=( TCHAR ch ); throw( CMemoryException );
const CString& operator +=( LPCTSTR lpsz ); throw( CMemoryException );
参 数
string
将 连 接 到 此 字 符 串 之 后 的 CString 对 象 。
ch
将 连 接 到 此 字 符 串 之 后 的 一 个 字 符 。
lpsz
指 向 将 连 接 到 此 字 符 串 之 后 的 的 字 符 串 的 指 针 。
说 明
此 += 连 接 操 作 符 将 字 符 连 接 到 此 CString 字 符 串 之 后 。 += 操 作 符 可 以 接 受 另 一个 CString 对 象 , 一 个 指 向 字 符 的 指 针 或 一 个 字 符 作 为 参 数 。 不 管 你 什 么 时 候使 用 这 个 连 接 操 作 符 , 都 要 小 心 可 能 出 现 的 内 存 异 常 , 因 为 常 常 要 为 添 加 到 这个 CString 对 象 的 字 符 分 配 内 存 。
示 例
下 面 的 例 子 说 明 了 如 何 使 用 CString::operator += 。
// CString::operator += 示例
CString s( "abc" );
ASSERT( ( s += "def" ) == "abcdef" );
请 参 阅 CString::operator +
CString Comparison Operators
BOOL operator ==( const CString& s1 , const CString& s2 ); BOOL operator ==( const CString& s1 , LPCTSTR s2 ); BOOL operator ==( LPCTSTR s1 , const CString& s2 ); BOOL operator !=( const CString& s1 , const CString& s2 ); BOOL operator !=( const CString& s1 , LPCTSTR s2 ); BOOL operator !=( LPCTSTR s1 , const CString& s2 ); BOOL operator <( const CString& s1 , const CString& s2 ); BOOL operator <( const CString& s1 , LPCTSTR s2 ); BOOL operator <( LPCTSTR s1 , const CString& s2 ); BOOL operator >( const CString& s1 , const CString& s2 ); BOOL operator >( const CString& s1 , LPCTSTR s2 ); BOOL operator >( LPCTSTR s1 , const CString& s2 ); BOOL operator <=( const CString& s1 , const CString& s2 ); BOOL operator <=( const CString& s1 , LPCTSTR s2 );
BOOL operator <=( LPCTSTR s1 , const CString& s2 ); BOOL operator >=( const CString& s1 , const CString& s2 ); BOOL operator >=( const CString& s1 , LPCTSTR s2 ); BOOL operator >=( LPCTSTR s1 , const CString& s2 );
返 回 值
如 果 字 符 串 满 足 比 较 条 件 则 返 回 非 零 值 ; 否 则 返 回 0 。
参 数
s1, s2
要 比 较 的 CString 对 象 。
说 明
这 些 比 较 操 作 符 用 来 比 较 两 个 字 符 串 。 它 们 是 区 分 大 小 写 的 Compare 成 员 函 数的 方 便 的 代 用 符 。
// CString 比较操作符示例
CString s1( "abc" ); CString s2( "abd" );
ASSERT( s1 < s2 ); // Operator is overloaded for both. ASSERT( "ABC" < s1 ); // CString and char* ASSERT( s2 > "abe" );
CString::operator [ ]
TCHAR operator []( int nIndex ) const;
参 数
nIndex
字 符 串 中 的 一 个 字 符 的 从 零 开 始 的 索 引 。
你 可 以 将 一 个 CString 对 象 看 作 是 一 个 字 符 数 组 。 此 重 载 下 标 操 作 符 ( []) 返 回由 nIndex 中 的 从 零 开 始 的 索 引 值 指 定 的 一 个 字 符 。 此 操 作 符 是 GetAt 成 员 函 数的 惯 用 的 代 用 符 。
示 例
下 面 的 例 子 说 明 了 如 何 使 用 CString::operator [ ] 操 作 符 。
// CString::operator [ ] 示例
CString s( "abc" );
ASSERT( s[1] == 'b' );
请 参 阅 CString::GetAt, CString::SetAt