主页C++ Builder 资料C++ Builder 参考手册System 字符串AnsiStringBase
C++ Builder 串口控件
C++ Builder 编程技巧
C++ Builder 操作指南
C++ Builder 参考手册
基础知识
cfloat 浮点数
cmath 数学函数
cstdlib 标准库函数
System 字符串
 • UnicodeString
 • UTF8String
 • TStringList
 • TStrings
 • String
 • AnsiString
 • AnsiStringBase
   · 方法
   · 类型
   · 数据
 • AnsiStringT
 • RawByteString
 • UCS4String
 • WideString
 • EnumToStr
 • FloatToStr
 • FloatToStrF
 • FormatFloat
 • IntToStr
 • UIntToStr
 • IntToHex
 • StrToEnum
 • StrToFloat
 • StrToFloatDef
 • StrToInt
 • StrToIntDef
 • StrToInt64
 • StrToInt64Def
 • StrToUInt64
 • StrToUInt64Def
 • TFloatFormat
 • GetUnicodeCategory
 • IMLangCodePages
 • StringReplace
System 日期和时间
System.Math.hpp 数学函数
其他数据类型
VCL 基础类
VCL 应用程序
Pictures 图片
Graphics 绘图
Additional 控件
System 控件
A ~ Z 字母顺序排列的目录
网友留言/技术支持
AnsiStringBase - 字符串模板 AnsiStringT 的父类

属性方法事件类型数据返回 AnsiStringBase 类

方法 描述
public:  
~AnsiStringBase ~AnsiStringBase();
析构函数,这个析构函数不是虚函数
LoadStr static AnsiStringBase LoadStr(int ident, int codePage);
static AnsiStringBase LoadStr(HINSTANCE hInstance, int ident, int codePage);
参数:从资源里面加载字符串,hInstance 为实例句柄,ident 为字符串的资源 ID,codePage 为代码页
返回值:从资源里面读出的字符串值
FmtLoadStr static AnsiStringBase FmtLoadStr(int ident, const TVarRec *args, int size, int codePage);
从资源里面加载字符串,ident 为资源 ID,加载的字符串作为 Format 函数的格式,args 和 size 作为 Format 函数的参数,codePage 为代码页,返回把参数按照资源字符串格式的格式化的结果。
LoadString AnsiStringBase &LoadString(HINSTANCE hInstance, int ident, int codePage);
参数:从资源里面加载字符串到当前对象,hInstance 为实例句柄,ident 为字符串的资源 ID,codePage 为代码页
返回值:加载字符串到当前对象,然后返回当前对象的引用 (*this)
StringOfChar static AnsiStringBase StringOfChar(char ch, int count);
生成 count 个字符 ch 的字符串。
Format static AnsiStringBase Format(const AnsiStringBase& format, const TVarRec *args, int size, int codePage);
实现 Delphi 样式的 Format 函数,codePage 为代码页
vprintf int __cdecl vprintf(int codePage, const char* format, va_list);
把 vprintf 的格式输出结果输出到当前的字符串 this 里面,codePage 为代码页,返回字符串长度。
cat_vprintf int __cdecl cat_vprintf(int codePage, const char* format, va_list);
保留字符串原来的内容,把 vprintf 的格式输出结果添加在字符串的后面,codePage 为代码页,返回字符串新增部分的长度。
FormatFloat static AnsiStringBase FormatFloat(const AnsiStringBase& format, const long double& value, int codePage);
返回浮点数 value 按照规定的格式 format 生成的字符串,codePage 为代码页
FloatToStrF static AnsiStringBase FloatToStrF(long double value, TStringFloatFormat format, int precision, int digits, int codePage);
返回浮点数 value 按照规定的格式 format 及精度 precision, digits 生成的字符串,codePage 为代码页
格式 TStringFloatFormat 请参考 AnsiStringBase 类型成员里面的 TStringFloatFormat
IntToHex static AnsiStringBase IntToHex(int value, int digits, int codePage);
把整数转为 16 进制字符串,生成的字符串至少 digits 位,不足前面补 0,codePage 为代码页
CurrToStr static AnsiStringBase CurrToStr(const Currency& value, int codePage);
金额值转字符串,codePage 为代码页
CurrToStrF static AnsiStringBase CurrToStrF(const Currency& value, TStringFloatFormat format, int digits, int codePage);
把金额值 value 按照 format 格式转为字符串,精度为 digits,codePage 为代码页
格式 TStringFloatFormat 请参考 AnsiStringBase 类型成员里面的 TStringFloatFormat
operator == bool operator ==(const AnsiStringBase& rhs) const;
判断相等,和 AnsiCompare 方法的返回值 == 0 的效果相同,规则请看 AnsiCompare 方法。
operator != bool operator !=(const AnsiStringBase& rhs) const;
判断不等,和 AnsiCompare 方法的返回值 != 0 的效果相同,规则请看 AnsiCompare 方法
operator < bool operator <(const AnsiStringBase& rhs) const;
判断小于,和 AnsiCompare 方法的返回值 < 0 的效果相同,规则请看 AnsiCompare 方法
operator > bool operator >(const AnsiStringBase& rhs) const;
判断大于,和 AnsiCompare 方法的返回值 > 0 的效果相同,规则请看 AnsiCompare 方法
operator <= bool operator <=(const AnsiStringBase& rhs) const;
判断小于等于,和 AnsiCompare 方法的返回值 <= 0 的效果相同,规则请看 AnsiCompare 方法
operator >= bool operator >=(const AnsiStringBase& rhs) const;
判断大于等于,和 AnsiCompare 方法的返回值 >= 0 的效果相同,规则请看 AnsiCompare 方法
AnsiCompare int AnsiCompare(const AnsiStringBase& rhs) const;
比较字符串大小,s1.AnsiCompare(s2) 的结果
>0: s1>s2;
<0: s1<s2;
==0 s1==s2
比较字符串大小和本地语言相关,比如字母顺序、按照笔画数、按照拼音或注音的顺序等。
例如:相同的汉字,不同地区的笔画数可能不同,比如 “及” 大陆写法是 3 画,台湾写法是 4 画,读音的顺序也不同,大陆的拼音按照英文字母顺序 abcd (啊玻吃的),而台湾按照注音顺序 bpmf (玻破莫佛)。
默认的,根据操作系统控制面板里面的语言设定,大陆按照拼音对照英文字母 “啊玻吃的” 的顺序,台湾按照笔画数的顺序。如果要和控制面板的语言设定不同的顺序,需要用 Windows API 函数 CompareString
AnsiCompareIC int AnsiCompareIC(const AnsiStringBase& rhs) const;
比较字符串大小,忽略大小写,s1.AnsiCompareIC(s2) 的结果
>0: s1>s2;
<0: s1<s2;
==0 s1==s2
忽略大小写,其他规则与 AnsiCompare 方法相同。
大小写根据这个 ANSI 编码支持的 UNICODE 字符的属性,例如中国大陆 GBK 编码 (代码页 936) 支持英文字母、希腊字母和俄文字母的大小写转换。请参考 “大小写转换” 的内容。
operator [] char operator [](const int idx) const;
char& operator [](const int idx);
访问字符串里面的第 idx 个字符。
如果通过这个操作符修改字符串,会先调用 Unique 方法和其他字符串脱离引用关系,再进行修改。
operator + AnsiStringBase operator +(const AnsiStringBase& rhs) const;
字符串相加操作符,把两个字符串连接起来。
这个操作符不会改变两个相加的字符串的值,而是返回值为两个字符串连接在一起的字符串。
Length int Length() const;
返回字符串长度,即字符串里面的 char 的个数,并不是真实的字符个数,因为可能有双字节字符或四字节字符。
IsEmpty bool IsEmpty() const { return Data == 0; }
字符串是否为空。true: 空,false: 非空。
Unique AnsiStringBase &Unique();
让这个对象和其他共同引用同一个数据的对象脱离关系,如果和其他对象共用数据,会分配内存,把以前引用的数据复制过来,把以前引用的数据的引用计数 (RefCount) 减 1,让自身分配的数据的引用计数 (RefCount) 等于 1,返回值为 *this 的引用。调用这个方法之后,这个对象是它的数据的唯一一个拥有者。
例:赋值、数据指针、引用计数的测试
Insert AnsiStringBase& Insert(const AnsiStringBase& str, int index);
在字符串的 index 字符位置插入一个字符串 str,返回值为 *this 的引用。Insert 认为第一个字符的索引为 1。
Delete AnsiStringBase& Delete(int index, int count);
从字符串的 index 字符位置开始删除 count 个字符,返回值为 *this 的引用。Delete 认为第一个字符的索引为 1。
SetLength AnsiStringBase& SetLength(int newLength, int codePage);
字符串的长度更改为 newLength,重新给字符串分配内存,字符串前面部分保留,多余部分的字符被删除,新增的字符值可能是随机数,返回值为 *this 的引用。如果在重新分配内存时内存不足,会抛出 EOutOfMemory 异常。
Pos int Pos(const AnsiStringBase& subStr) const;
查找 subStr 在字符串中出现的位置。Pos 认为第一个字符的索引为 1,找不到 subStr 返回值为 0。
Pos 方法并不解析 MBCS 多字节字符,如果包含双字节字符 (例如:汉字),可能会因为 Trail Byte (后尾字节) 的取值范围为随意字符而引起找到错误的位置。如果是这种情况,需要使用 AnsiPos 方法。
LowerCase AnsiStringBase LowerCase(int codePage) const;
把字符串转为小写,函数返回新的字符串,原来的字符串并没有改变。
不仅仅限于英文,codePage 为代码页,例如中国大陆 GBK 编码 (代码页 936) 支持英文字母、希腊字母和俄文字母的大小写转换;而 UTF-8 编码 (代码页 65001) 支持所有的 UNICODE 字符。请参考 “大小写转换” 的内容。
UpperCase AnsiStringBase UpperCase(int codePage) const;
把字符串转为大写,函数返回新的字符串,原来的字符串并没有改变。
不仅仅限于英文,codePage 为代码页,例如中国大陆 GBK 编码 (代码页 936) 支持英文字母、希腊字母和俄文字母的大小写转换;而 UTF-8 编码 (代码页 65001) 支持所有的 UNICODE 字符。请参考 “大小写转换” 的内容。
Trim AnsiStringBase Trim(int codePage) const;
把字符串开头和末尾的空格与控制符删掉,codePage 为代码页,返回新的字符串,原来的字符串并没有改变。
TrimLeft AnsiStringBase TrimLeft(int codePage) const;
把字符串开头的空格与控制符删掉,codePage 为代码页,返回新的字符串,原来的字符串并没有改变。
TrimRight AnsiStringBase TrimRight(int codePage) const;
把字符串末尾的空格与控制符删掉,codePage 为代码页,返回新的字符串,原来的字符串并没有改变。
SubString AnsiStringBase SubString(int index, int count);
返回字符串当中从第 index 个字符开始的 count 个字符的字符串。
ToInt int ToInt() const;
把字符串转为整数,如果转换失败,会抛出 EConvertError 异常。
ToIntDef int ToIntDef(int defaultValue) const;
把字符串转为整数,如果转换失败,返回 defaultValue 而不会抛出异常。
ToDouble double ToDouble() const;
把字符串转为浮点数,如果转换失败,抛出 EConvertError 异常。
支持把科学计数法 (L"-123.45e+67" 这样的格式) 转为浮点数,不支持 +INF, -INF 和 NAN。
IsDelimiter bool IsDelimiter(const AnsiStringBase& delimiters, int index) const;
返回字符串里面的第 index 个字符,是否也存在于字符串 delimiters 里面。例如:
s = "abcdefghijklmn";
s.IsDelimiter("aeiou",1) 为 true,因为 s 的第 1 个字符 'a' 是在字符串 "aeiou" 里面的字符
s.IsDelimiter("aeiou",2) 为 false,因为 s 的第 2 个字符 'b' 不在字符串 "aeiou" 里面
s.IsDelimiter("aeiou",5) 为 true,因为 s 的第 5 个字符 'e' 是在字符串 "aeiou" 里面的字符
IsPathDelimiter bool IsPathDelimiter(int index) const;
字符串里面的第 index 个字符,是否为文件路径的分割符。
Windows 的路径分割符为 '\\' 而其他系统的分割符为 '/'
LastDelimiter int LastDelimiter(const AnsiStringBase& delimiters) const;
返回字符串里面最后一个字符是否存在于字符串 delimiters 里面。
请参考 IsDelimiter 方法。
WideCharBufSize int WideCharBufSize(int codePage) const;
把字符串转为 wchar_t * 宽字符字符串需要多少个 wchar_t 字符,包括结束符,codePage 为代码页
返回值为需要的字符个数。
WideChar wchar_t *WideChar(wchar_t *dest, int destSize, int codePage) const;
把字符串转为 wchar_t * 宽字符字符串,dest 为转换之后的字符串存放的位置,destSize 为 dest 的大小 (wchar_t 字符个数,包括结束符),codePage 为代码页。返回值为 dest 参数。
ByteType TStringMbcsByteType ByteType(int index) const;
返回字符串里面的第 index 个字符的字节类型。请参考 TStringMbcsByteType 类型
例1:双字节字符集 (DBCS) 的例子 - GBK 编码的例子
例2:多字节字符集 (MBCS) 的例子 - GB18030 编码的例子
IsLeadByte bool IsLeadByte(int index) const;
字符串里面的第 index 个字符是 Lead Byte (前导字节)。请参考 TStringMbcsByteType 类型
例1:双字节字符集 (DBCS) 的例子 - GBK 编码的例子
例2:多字节字符集 (MBCS) 的例子 - GB18030 编码的例子
IsTrailByte bool IsTrailByte(int index) const;
字符串里面的第 index 个字符是 Lead Byte (后尾字节)。请参考 TStringMbcsByteType 类型
例1:双字节字符集 (DBCS) 的例子 - GBK 编码的例子
例2:多字节字符集 (MBCS) 的例子 - GB18030 编码的例子
AnsiPos int AnsiPos(const AnsiStringBase& subStr) const;
查找 subStr 在字符串中出现的位置。AnsiPos 认为第一个字符的索引为 1,找不到 subStr 返回值为 0。
Pos 方法并不解析 MBCS 多字节字符,如果包含双字节字符 (例如:汉字),可能会因为 Trail Byte (后尾字节) 的取值范围为随意字符而引起找到错误的位置。如果是这种情况,需要使用 AnsiPos 方法。
AnsiLastChar char* AnsiLastChar() const;
返回字符串里面最后一个字符的位置。如果字符串里面的最后一个字符是 Trail Byte (后尾字节),由于后尾字节的取值范围可以是任何字符,直接根据取值范围可能会认为是单个字符,而 AnsiLastChar 方法会解析字符编码,返回真正的最后一个字符的位置,是单字节字符,或者双字节字符的第一个字节 Lead Byte (前导字节),而不会返回 Trail Byte (后尾字节) 的位置。
BytesOf DynamicArray<System::Byte> BytesOf() const;
把字符串转为 ANSI 本地编码的字符串,把字符串的内容放在 DynamicArray 数组里面返回。
如果要其他编码的 DynamicArray 数组,需要用 TEncoding 的 GetBytes 方法,例如:
DynamicArray<System::Byte> Bytes = TEncoding::UTF8->GetBytes(s);
ElementSize unsigned short ElementSize() const;
返回字符串里面每个元素的字节数,ANSI / UTF-8 / UTF-7 编码每个元素是 1 个字节的 (char)。
RefCount int RefCount() const;
返回字符串数据的引用计数,空字符串返回 0。
返回值 = 0: 没有数据,c_str 和 w_str 方法返回的空字符串并不是这个字符串的数据,这个字符串的内部数据是 NULL,
返回值 = 1: 这个字符串是这个字符串数据的唯一拥有者,可以通过 c_str 和 w_str 返回的指针修改数据,
返回值 ≥ 2: 和其他字符串共有数据,这是共有数据的字符串的个数,如果通过 c_str 或 w_str 指针修改了数据,这些 (一共 RefCount() 个) 字符串的内容会同时被修改了。【例:赋值、数据指针、引用计数的测试
CodePage unsigned short CodePage() const;
返回字符串的代码页
swap AnsiStringBase &swap(AnsiStringBase &other);
把字符串的内容和 other 字符串进行交换。
这个方法是通过数据指针交换来实现的,而不是拷贝数据,所以速度非常快,适合在排序等操作中交换字符串。
protected:  
AnsiStringBase AnsiStringBase(): Data(0) {}
AnsiStringBase(const AnsiStringBase& src);
AnsiStringBase(const char* src, int codePage);
AnsiStringBase(const char* src, int byteLen, int codePage);
AnsiStringBase(const wchar_t* src, int numwchar, int codePage);
AnsiStringBase(const char16_t* src, int numChar16, int codePage);
AnsiStringBase(const char32_t* src, int numChar32, int codePage);
AnsiStringBase(double src, int codePage);
AnsiStringBase(System::WideChar src, int codePage);
AnsiStringBase(const WideString &src, int codePage);
AnsiStringBase(const UnicodeString &src, int codePage);
template <unsigned short CP> AnsiStringBase(AnsiStringT<CP>&& src);
构造函数。
构造函数放在了 protected 里面,是为了阻止直接定义 AnsiStringBase 对象。
需要使用 AnsiStringBase 的子类 AnsiStringUTF8StringRawByteStringAnsiStringT<CP> 等来定义对象。
operator = AnsiStringBase &operator =(const AnsiStringBase& rhs);
赋值操作符。
赋值操作符放在了 protected 里面,是因为这个类不是虚类,还要强制让子类来实现这个方法。
_AnsiCat static void _AnsiCat(AnsiStringBase &dst, const AnsiStringBase &src);
static void _AnsiCat(AnsiStringBase &dst, const AnsiStringBase &src1, const AnsiStringBase &src2);
AnsiStringBase 内部使用的方法。
_AnsiFromPWChar static void _AnsiFromPWChar(AnsiStringBase &dst, const WideChar *src, int len, int codePage);
AnsiStringBase 内部使用的方法。
ThrowIfOutOfRange void __cdecl ThrowIfOutOfRange(int idx) const;
检查字符索引 idx 是否有效。如果 idx 不在 1 到长度之间,会抛出 ERangeError 异常。字符串内部使用的方法。
GetRec const StrRec& GetRec() const;
StrRec& GetRec();
获取字符串的 StrRec 结构体。请参考 UnicodeString 类型成员里面的 StrRec

属性方法事件类型数据返回 AnsiStringBase 类

下一页:类型

C++ 爱好者 -- Victor Chen 的个人网站 www.cppfans.com 辽ICP备11016859号