1 / 18

标准字符串类介绍

C++ Builder 可视化编程技术 之. 标准字符串类介绍. C++ Builder 兼容 C 语言的数据类型. bool( 布尔型 ) true / false class( 类 ). char int long float double 数组 struct 结构体. 一个有用的类: AnsiString. AnsiString 是 CBuilder 中的一个字符串类, 其中包含了对字符串的大部分操作,包括 类型转换 ,字符串 增删改 , 长度 计算, 子串查找 等,而且避免了 C 语言操作字符串的缺陷和缺点 ,是一个常用的数据存储类。.

malana
Download Presentation

标准字符串类介绍

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. C++ Builder 可视化编程技术之 标准字符串类介绍

  2. C++ Builder兼容C语言的数据类型 • bool(布尔型)true / false • class(类) • char • int • long • float • double • 数组 • struct结构体

  3. 一个有用的类:AnsiString • AnsiString 是CBuilder中的一个字符串类, • 其中包含了对字符串的大部分操作,包括类型转换,字符串增删改,长度计算,子串查找等,而且避免了C语言操作字符串的缺陷和缺点,是一个常用的数据存储类。

  4. C语言操作字符串有什么缺陷? • char buff[20]; // 长度为20真的够用吗? • 程序运行期间字符串的长度总在变化,处理复杂流程时很容易出现下标越界情况。例如: • main( ){ char buf[5]=“123456”; buf[6]=‘A’; //编译不会出错 } • 而C语言编译器又不能检查下标越界问题。所以不当的使用数组会导致程序崩溃。

  5. 用C语言解决以下问题试试 • 在C语言中如何把字符串2复制到字符串1中? • strcpy(字符串1,字符串2); • 在C语言中如何把字符串2连接到字符串1中? • strcat(字符串1,字符串2); • 如何把一个整型数转化为字符串? • itoa(整型数,字符指针,基数); • 如何把浮点型数转化为字符串? • char *fcvt(value, ndigit, *decpt, *sign);

  6. 用AnsiString解决以下问题 • 在C语言中如何把字符串2复制到字符串1中? • 字符串1=字符串2; • 在C语言中如何把字符串2连接到字符串1中? • 字符串1=字符串1 +字符串2; • 如何把一个整型数转化为字符串? • 字符串1=整型数; • 如何把浮点型数转化为字符串? • 字符串1=浮点型数; AnsiString用起来很方便,因为 AnsiString类把这些运算符 重载(即重新定义了功能)了。

  7. AnsiString的类型转换 • AnsiString类是功能很强的字符串类 • AnsiString类构造器可以从char、char*、int、float或double生成AnsiString类对象。 • 这些构造器很容易将直接字串赋予AnsiString类并将某类型变成字串。

  8. AnsiString的类型转换 下列例子显式或隐式使用AnsiString类构造器: AnsiString FloatString = 127.123; AnsiString AnotherFloatString(0.999); AnsiString IntString = 49; AnsiString CharString = 'A'; LabellCaption = "This is a test"; double d = 3.14 * 20;Edit1Text = d;

  9. 常用的AnsiString方法 C_str 返回字串的数据的指针(char*) Delete 删除字串的一部分 Insert 在现有字串的指定位置插入文本 Length 返回字串长度,不包括结束符 Pos 返回子字串在字串中的起始位置 SubString 返回字串中从指定位置开始、 指定长度的子串 Trim 删除字串前后的空格

  10. 常用的AnsiString方法(续) ToDouble 将字串变成浮点数,如果无法将 字串变成浮点数,则抛出异常; ToInt 将字串变成整数,如果无法将字 串变成整数,则抛出异常; ToIntDef 将字串变成整数并在不能换算时 提供缺省值而不扔出异常 LowerCase 将字串变成小写 UpperCase 将字串变成大写 sprintf 格式化AnsiString字符串

  11. C_str( )方法 • 返回值为AnsiString的字串缓冲区首地址(char *类型)。 • 为什么要有这个函数呢? • 有些C语言库函数要用到此参数。 • 有些Windows API函数需要char *参数。 • (Application Progarmming Inteface)

  12. AnsiString的增删改方法 + 字符串连接(增): Edit1->Text=Edit1->Text+”New String”; Delete 删除字串的一部分,返回新字符串 Edit1->Text=Edit1->Text.Delete(1,1); Insert 在字串的指定位置插入文本后 返回新字符串 Edit1->Text= Edit1->Text.Insert(Edit1->Text,3);

  13. 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());

  14. ToInt( ) & ToDouble( ) • ToInt( )将字串变成整数。 int value = Edit1->Text.ToInt(); • ToDouble()方法的用法也一样。注意,如果不能换算,这两个方法都会扔出异常。 UpperCase() & LowerCase() Edit1->Text= Edit1->Text.UpperCase();

  15. ※格式化字符串函数sprintf Edit1Text=Edit1Text.sprintf("My age is %d",30); 执行结果Edit1Text=“My age is 30”; sprintf与printf的参数用法一样,只不过是sprintf把结果输出到新字符串,而printf把结果输出到显示终端。

  16. 使用索引操作符 • AnsiString类还可以使用索引操作符([]) 引用字串的特定元素: String S = "Hello World!"; Label1Caption = S[1]; // 将字符H赋予标签的Caption属性。 • 这里要指出的是,字串的头一个元素是下标1的元素,而不象其它C++数组一样是下标0的元素。下标从1开始的主要原因是为了与Delphi兼容。

  17. 字符串练习题 • 删除用户输入数据中”ABC”字符串。 • 例如用户在Edit1中输入“ABC123AB”,点击执行按钮后Edit1的内容变为”123AB”; • 把用户输入数据中”AB”字符串替换为”123”。 • 例如用户在Edit2中输入“AAB12”,点击执行按钮后Edit2的内容变为”A12312”;

  18. 总结 • 本节课我们讲解了AnsiString的用法 • 包括: • AnsiString的数据转换; • 字符串的增删改; • 其它字符串相关方法。 • 练习要求: • 上机把每个方法都实践一下。

More Related