180 likes | 325 Views
C++ Builder 可视化编程技术 之. 标准字符串类介绍. C++ Builder 兼容 C 语言的数据类型. bool( 布尔型 ) true / false class( 类 ). char int long float double 数组 struct 结构体. 一个有用的类: AnsiString. AnsiString 是 CBuilder 中的一个字符串类, 其中包含了对字符串的大部分操作,包括 类型转换 ,字符串 增删改 , 长度 计算, 子串查找 等,而且避免了 C 语言操作字符串的缺陷和缺点 ,是一个常用的数据存储类。.
E N D
C++ Builder 可视化编程技术之 标准字符串类介绍
C++ Builder兼容C语言的数据类型 • bool(布尔型)true / false • class(类) • char • int • long • float • double • 数组 • struct结构体
一个有用的类:AnsiString • AnsiString 是CBuilder中的一个字符串类, • 其中包含了对字符串的大部分操作,包括类型转换,字符串增删改,长度计算,子串查找等,而且避免了C语言操作字符串的缺陷和缺点,是一个常用的数据存储类。
C语言操作字符串有什么缺陷? • char buff[20]; // 长度为20真的够用吗? • 程序运行期间字符串的长度总在变化,处理复杂流程时很容易出现下标越界情况。例如: • main( ){ char buf[5]=“123456”; buf[6]=‘A’; //编译不会出错 } • 而C语言编译器又不能检查下标越界问题。所以不当的使用数组会导致程序崩溃。
用C语言解决以下问题试试 • 在C语言中如何把字符串2复制到字符串1中? • strcpy(字符串1,字符串2); • 在C语言中如何把字符串2连接到字符串1中? • strcat(字符串1,字符串2); • 如何把一个整型数转化为字符串? • itoa(整型数,字符指针,基数); • 如何把浮点型数转化为字符串? • char *fcvt(value, ndigit, *decpt, *sign);
用AnsiString解决以下问题 • 在C语言中如何把字符串2复制到字符串1中? • 字符串1=字符串2; • 在C语言中如何把字符串2连接到字符串1中? • 字符串1=字符串1 +字符串2; • 如何把一个整型数转化为字符串? • 字符串1=整型数; • 如何把浮点型数转化为字符串? • 字符串1=浮点型数; AnsiString用起来很方便,因为 AnsiString类把这些运算符 重载(即重新定义了功能)了。
AnsiString的类型转换 • AnsiString类是功能很强的字符串类 • AnsiString类构造器可以从char、char*、int、float或double生成AnsiString类对象。 • 这些构造器很容易将直接字串赋予AnsiString类并将某类型变成字串。
AnsiString的类型转换 下列例子显式或隐式使用AnsiString类构造器: AnsiString FloatString = 127.123; AnsiString AnotherFloatString(0.999); AnsiString IntString = 49; AnsiString CharString = 'A'; LabellCaption = "This is a test"; double d = 3.14 * 20;Edit1Text = d;
常用的AnsiString方法 C_str 返回字串的数据的指针(char*) Delete 删除字串的一部分 Insert 在现有字串的指定位置插入文本 Length 返回字串长度,不包括结束符 Pos 返回子字串在字串中的起始位置 SubString 返回字串中从指定位置开始、 指定长度的子串 Trim 删除字串前后的空格
常用的AnsiString方法(续) ToDouble 将字串变成浮点数,如果无法将 字串变成浮点数,则抛出异常; ToInt 将字串变成整数,如果无法将字 串变成整数,则抛出异常; ToIntDef 将字串变成整数并在不能换算时 提供缺省值而不扔出异常 LowerCase 将字串变成小写 UpperCase 将字串变成大写 sprintf 格式化AnsiString字符串
C_str( )方法 • 返回值为AnsiString的字串缓冲区首地址(char *类型)。 • 为什么要有这个函数呢? • 有些C语言库函数要用到此参数。 • 有些Windows API函数需要char *参数。 • (Application Progarmming Inteface)
AnsiString的增删改方法 + 字符串连接(增): Edit1->Text=Edit1->Text+”New String”; Delete 删除字串的一部分,返回新字符串 Edit1->Text=Edit1->Text.Delete(1,1); Insert 在字串的指定位置插入文本后 返回新字符串 Edit1->Text= Edit1->Text.Insert(Edit1->Text,3);
AnsiString的其它方法 Length 返回字串长度,不包括结束符 ShowMessage(Edit1->Text.Length()); Pos 返回搜索字串在字串中的位置 ShowMessage(Edit1->Text.Pos(“d”)); SubString返回字串中从指定位置开始、 指定长度的子串 ShowMessage(Edit1->Text.SubString(1,2)); Trim 删除字串前后的空格Label1->Caption=(Edit1->Text.Trim());
ToInt( ) & ToDouble( ) • ToInt( )将字串变成整数。 int value = Edit1->Text.ToInt(); • ToDouble()方法的用法也一样。注意,如果不能换算,这两个方法都会扔出异常。 UpperCase() & LowerCase() Edit1->Text= Edit1->Text.UpperCase();
※格式化字符串函数sprintf Edit1Text=Edit1Text.sprintf("My age is %d",30); 执行结果Edit1Text=“My age is 30”; sprintf与printf的参数用法一样,只不过是sprintf把结果输出到新字符串,而printf把结果输出到显示终端。
使用索引操作符 • AnsiString类还可以使用索引操作符([]) 引用字串的特定元素: String S = "Hello World!"; Label1Caption = S[1]; // 将字符H赋予标签的Caption属性。 • 这里要指出的是,字串的头一个元素是下标1的元素,而不象其它C++数组一样是下标0的元素。下标从1开始的主要原因是为了与Delphi兼容。
字符串练习题 • 删除用户输入数据中”ABC”字符串。 • 例如用户在Edit1中输入“ABC123AB”,点击执行按钮后Edit1的内容变为”123AB”; • 把用户输入数据中”AB”字符串替换为”123”。 • 例如用户在Edit2中输入“AAB12”,点击执行按钮后Edit2的内容变为”A12312”;
总结 • 本节课我们讲解了AnsiString的用法 • 包括: • AnsiString的数据转换; • 字符串的增删改; • 其它字符串相关方法。 • 练习要求: • 上机把每个方法都实践一下。