主页C++ Builder 资料C++ Builder 参考手册System 字符串AnsiStringT
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 字母顺序排列的目录
网友留言/技术支持
AnsiStringT - 字符串模板

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

成员 函数原型
public:  
AnsiStringT AnsiStringT();
AnsiStringT(const char* src);
AnsiStringT(const AnsiStringT& src);
AnsiStringT(AnsiStringBase&& src);
AnsiStringT<CP>(const AnsiStringT<OTHER_CP>& src);
AnsiStringT(const char* src, int byteLen);
AnsiStringT(const wchar_t* src, int numwchar = -1);
AnsiStringT(const char16_t* src, int numChar16 = -1);
AnsiStringT(const char32_t* src, int numChar32 = -1);
AnsiStringT(char src);
AnsiStringT(System::WideChar src);
AnsiStringT(short src);
AnsiStringT(unsigned short src);
AnsiStringT(int src);
AnsiStringT(unsigned int src);
AnsiStringT(long src);
AnsiStringT(unsigned long src);
AnsiStringT(__int64 src);
AnsiStringT(unsigned __int64 src);
AnsiStringT(double src);
AnsiStringT(const WideString &src);
AnsiStringT(const UnicodeString &src);
构造函数
~AnsiStringT ~AnsiStringT();
析构函数
operator = AnsiStringT &operator =(const AnsiStringT &rhs);
赋值操作符。【例:赋值及引用计数的测试
operator + AnsiStringT operator +(const AnsiStringT &rhs) const;
字符串相加操作符,把两个字符串连接起来。
这个操作符不会改变两个相加的字符串的值,而是返回值为两个字符串连接在一起的字符串。
operator += AnsiStringT &operator +=(const AnsiStringT& rhs);
+= 操作符。
operator == bool operator ==(const AnsiStringT& rhs) const
判断相等,和 AnsiCompare 方法的返回值 == 0 的效果相同,规则请看 AnsiCompare 方法。
operator != bool operator !=(const AnsiStringT& rhs) const
判断不等,和 AnsiCompare 方法的返回值 != 0 的效果相同,规则请看 AnsiCompare 方法
operator < bool operator <(const AnsiStringT& rhs) const
判断小于,和 AnsiCompare 方法的返回值 < 0 的效果相同,规则请看 AnsiCompare 方法
operator > bool operator >(const AnsiStringT& rhs) const
判断大于,和 AnsiCompare 方法的返回值 > 0 的效果相同,规则请看 AnsiCompare 方法
operator <= bool operator <=(const AnsiStringT& rhs) const
判断小于等于,和 AnsiCompare 方法的返回值 <= 0 的效果相同,规则请看 AnsiCompare 方法
operator >= bool operator >=(const AnsiStringT& rhs) const
判断大于等于,和 AnsiCompare 方法的返回值 >= 0 的效果相同,规则请看 AnsiCompare 方法
AnsiCompare int AnsiCompare(const AnsiStringT &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 AnsiStringT &rhs) const;
比较字符串大小,忽略大小写,s1.AnsiCompareIC(s2) 的结果
>0: s1>s2;
<0: s1<s2;
==0 s1==s2
忽略大小写,其他规则与 AnsiCompare 方法相同。
大小写根据这个 ANSI 编码支持的 UNICODE 字符的属性,例如中国大陆 GBK 编码 (代码页 936) 支持英文字母、希腊字母和俄文字母的大小写转换。请参考 “大小写转换” 的内容。
AnsiPos int AnsiPos(const AnsiStringT &subStr) const;
查找 subStr 在字符串中出现的位置。AnsiPos 认为第一个字符的索引为 1,找不到 subStr 返回值为 0。
Pos 方法并不解析 MBCS 多字节字符,如果包含双字节字符 (例如:汉字),可能会因为 Trail Byte (后尾字节) 的取值范围为随意字符而引起找到错误的位置。如果是这种情况,需要使用 AnsiPos 方法。
c_str char *c_str() const;
返回字符串指针。如果字符串不空,返回内部数据 Data,如果字符串为空,Data 为 NULL,会返回一个空字符串。
不建议通过 c_str() 返回的字符指针修改字符串内容,只有 RefCount() 方法返回 1 的时候,通过这个指针修改字符串内容是安全的。测试程序:【例:赋值、数据指针、引用计数的测试
data const void* data() const { return Data; }
返回字符串指针,这是字符串内部保存数据的指针,空字符串会返回 NULL。
不建议通过 data() 返回的指针修改字符串内容,只有 RefCount() 方法返回 1 的时候,通过这个指针修改字符串内容是安全的,测试程序:【例:赋值、数据指针、引用计数的测试
LoadStr static AnsiStringT LoadStr(int ident);
static AnsiStringT LoadStr(HINSTANCE hInstance, int ident);
参数:从资源里面加载字符串,hInstance 为实例句柄,ident 为字符串的资源 ID,
返回值:从资源里面读出的字符串值
FmtLoadStr static AnsiStringT FmtLoadStr(int ident, const TVarRec *args, int size);
从资源里面加载字符串,ident 为资源 ID,加载的字符串作为 Format 函数的格式,args 和 size 作为 Format 函数的参数,返回把参数按照资源字符串格式的格式化的结果。
LoadString AnsiStringT &LoadString(HINSTANCE hInstance, int ident);
参数:从资源里面加载字符串到当前对象,hInstance 为实例句柄,ident 为字符串的资源 ID,
返回值:加载字符串到当前对象,然后返回当前对象的引用 (*this)
StringOfChar static AnsiStringT StringOfChar(char ch, int count);
生成 count 个字符 ch 的字符串。
Format static AnsiStringT Format(const AnsiStringT& format, const TVarRec *args, int size);
实现 Delphi 样式的 Format 函数,例如:
int i = 5; double f = 1.356;
s = AnsiString::Format("i=%d, f=%.2f", ARRAYOFCONST((i,f)));
得到的字符串 s:"i=5, f=1.36"
sprintf AnsiStringT &__cdecl sprintf(const char* format, ...);
把 printf 的格式输出结果输出到当前的字符串 this 里面,返回字符串引用 *this
例:s.sprintf("i=%d, f=%.2f", i, f);
printf int __cdecl printf(const char* format, ...);
把 printf 的格式输出结果输出到当前的字符串 this 里面,返回字符串长度。
例:s.printf("i=%d, f=%.2f", i, f);
cat_sprintf AnsiStringT &__cdecl cat_sprintf(const char* format, ...);
保留字符串原来的内容,把 sprintf 的格式输出结果添加在字符串的后面,返回字符串 *this 引用。
cat_printf int __cdecl cat_printf(const char* format, ...);
保留字符串原来的内容,把 printf 的格式输出结果添加在字符串的后面,返回字符串新增部分的长度。
vprintf int __cdecl vprintf(const char* format, va_list list);
把 vprintf 的格式输出结果输出到当前的字符串 this 里面,返回字符串长度。
cat_vprintf int __cdecl cat_vprintf(const char* format, va_list list);
保留字符串原来的内容,把 vprintf 的格式输出结果添加在字符串的后面,返回字符串新增部分的长度。
FormatFloat static AnsiStringT FormatFloat(const AnsiStringT &format, const long double &value);
返回浮点数 value 按照规定的格式 format 生成的字符串
FloatToStrF static AnsiStringT FloatToStrF(long double value, TStringFloatFormat format, int precision, int digits);
返回浮点数 value 按照规定的格式 format 及精度 precision, digits 生成的字符串,codePage 为代码页
格式 TStringFloatFormat 请参考 AnsiStringBase 类型成员里面的 TStringFloatFormat
IntToHex static AnsiStringT IntToHex(int value, int digits);
把整数转为 16 进制字符串,生成的字符串至少 digits 位,不足前面补 0。
CurrToStr static AnsiStringT CurrToStr(const Currency& value);
金额值转字符串。
CurrToStrF static AnsiStringT CurrToStrF(const Currency& value, TStringFloatFormat format, int digits);
把金额值 value 按照 format 格式转为字符串,精度为 digits。
格式 TStringFloatFormat 请参考 AnsiStringBase 类型成员里面的 TStringFloatFormat
Unique AnsiStringT& Unique();
让这个对象和其他共同引用同一个数据的对象脱离关系,如果和其他对象共用数据,会分配内存,把以前引用的数据复制过来,把以前引用的数据的引用计数 (RefCount) 减 1,让自身分配的数据的引用计数 (RefCount) 等于 1,返回值为 *this 的引用。调用这个方法之后,这个对象是它的数据的唯一一个拥有者。
例:赋值、数据指针、引用计数的测试
Insert AnsiStringT &Insert(const AnsiStringT& str, int index);
在字符串的 index 字符位置插入一个字符串 str,返回值为 *this 的引用。Insert 认为第一个字符的索引为 1。
Delete AnsiStringT &Delete(int index, int count);
从字符串的 index 字符位置开始删除 count 个字符,返回值为 *this 的引用。Delete 认为第一个字符的索引为 1。
SetLength AnsiStringT& SetLength(int newLength);
字符串的长度更改为 newLength,重新给字符串分配内存,字符串前面部分保留,多余部分的字符被删除,新增的字符值可能是随机数,返回值为 *this 的引用。如果在重新分配内存时内存不足,会抛出 EOutOfMemory 异常。
Pos int Pos(const AnsiStringT& subStr) const;
查找 subStr 在字符串中出现的位置。Pos 认为第一个字符的索引为 1,找不到 subStr 返回值为 0。
Pos 方法并不解析 MBCS 多字节字符,如果包含双字节字符 (例如:汉字),可能会因为 Trail Byte (后尾字节) 的取值范围为随意字符而引起找到错误的位置。如果是这种情况,需要使用 AnsiPos 方法。
LowerCase AnsiStringT LowerCase();
把字符串转为小写,函数返回新的字符串,原来的字符串并没有改变。
不仅仅限于英文,codePage 为代码页,例如中国大陆 GBK 编码 (代码页 936) 支持英文字母、希腊字母和俄文字母的大小写转换;而 UTF-8 编码 (代码页 65001) 支持所有的 UNICODE 字符。请参考 “大小写转换” 的内容。
UpperCase AnsiStringT UpperCase() const;
把字符串转为大写,函数返回新的字符串,原来的字符串并没有改变。
不仅仅限于英文,codePage 为代码页,例如中国大陆 GBK 编码 (代码页 936) 支持英文字母、希腊字母和俄文字母的大小写转换;而 UTF-8 编码 (代码页 65001) 支持所有的 UNICODE 字符。请参考 “大小写转换” 的内容。
Trim AnsiStringT Trim() const;
把字符串开头和末尾的空格与控制符删掉,返回新的字符串,原来的字符串并没有改变。
TrimLeft AnsiStringT TrimLeft() const;
把字符串开头的空格与控制符删掉,返回新的字符串,原来的字符串并没有改变。
TrimRight AnsiStringT TrimRight() const;
把字符串末尾的空格与控制符删掉,返回新的字符串,原来的字符串并没有改变。
SubString AnsiStringT SubString(int index, int count) const;
返回字符串当中从第 index 个字符开始的 count 个字符的字符串。
IsDelimiter bool IsDelimiter(const AnsiStringT& 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" 里面的字符
LastDelimiter int LastDelimiter(const AnsiStringT& delimiters) const;
返回字符串里面最后一个字符是否存在于字符串 delimiters 里面。
请参考 IsDelimiter 方法。
WideCharBufSize int WideCharBufSize() const;
把字符串转为 wchar_t * 宽字符字符串需要多少个 wchar_t 字符,包括结束符,codePage 为代码页
返回值为需要的字符个数。
WideChar wchar_t* WideChar(wchar_t* dest, int destSize) const;
把字符串转为 wchar_t * 宽字符字符串,dest 为转换之后的字符串存放的位置,destSize 为 dest 的大小 (wchar_t 字符个数,包括结束符),codePage 为代码页。返回值为 dest 参数。
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 AnsiStringT &swap(AnsiStringT& other);
把字符串的内容和 other 字符串进行交换。
这个方法是通过数据指针交换来实现的,而不是拷贝数据,所以速度非常快,适合在排序等操作中交换字符串。
AnsiStringBase:: AnsiStringBase 继承过来的
operator [] char operator [](const int idx) const;
char& operator [](const int idx);
访问字符串里面的第 idx 个字符。
如果通过这个操作符修改字符串,会先调用 Unique 方法和其他字符串脱离引用关系,再进行修改。
Length int Length() const;
返回字符串长度,即字符串里面的 char 的个数,并不是真实的字符个数,因为可能有双字节字符或四字节字符。
IsEmpty bool IsEmpty() const { return Data == 0; }
字符串是否为空。true: 空,false: 非空。
ToInt int ToInt() const;
把字符串转为整数,如果转换失败,会抛出 EConvertError 异常。
ToIntDef int ToIntDef(int defaultValue) const;
把字符串转为整数,如果转换失败,返回 defaultValue 而不会抛出异常。
ToDouble double ToDouble() const;
把字符串转为浮点数,如果转换失败,抛出 EConvertError 异常。
支持把科学计数法 (L"-123.45e+67" 这样的格式) 转为浮点数,不支持 +INF, -INF 和 NAN。
IsPathDelimiter bool IsPathDelimiter(int index) const;
字符串里面的第 index 个字符,是否为文件路径的分割符。
Windows 的路径分割符为 '\\' 而其他系统的分割符为 '/'
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 编码的例子
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);
protected:  
AnsiStringBase:: AnsiStringBase 继承过来的
_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。

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

下一页:类型

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