欢迎来到天天文库
浏览记录
ID:38363807
大小:50.50 KB
页数:13页
时间:2019-06-11
《C++ Builder AnsiString 类》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、AnsiString类C++BuilderAnsiString类介绍和使用介绍AnsiString类之前,先要介绍一些背景知识。VCL大量利用Pascal长字串数据类型,几乎所有基于文本的VCL属性都采用Pascal长字串。例如,Text、Name和Caption属性都是Pascal长字串属性。VCL的许多构件方法和事件处理函数也采用Pascal长字串。关于Pascal长字串数据类型要注意两点。第一,Pascal长字串是真正的语言数据类型,而不象C/C++中一样只是个字符数组。第二,C++内部没有Pascal长字串的对等类型。由于VCL大量使用Pascal长
2、字串,而C++Builder使用PascalVCL,所以Borland生成一个C++类来近似Pascal长字串,这个类就是AnsiString类,可以代替Pascal长字串。AnsiString类的类名不易理解,你要在SYSDEFS.H中采用如下语句:typedefAnsiStringString;这样就可以在声明AnsiString类的实例时用名称String而不用正式类名AnsiString类:Strings="Thisisatest";由于String是AnsiString类的别名,所以不必在C++Builder程序中再用AnsiString类名(当然
3、,还可以这么用)。为了清晰起见,我在文本中使用AnsiString类名,而在代码例子中使用缩略形式String。AnsiString类是功能很强的字串类。AnsiString类构造器可以从Char、Char*、int或double生成AnsiString类对象。这些构造器很容易将直接字串赋予AnsiString类并将整数或浮点数变成字串。下列例子显式或隐式使用AnsiString类构造器:StringFloatString=127.123;StringAnotherFloatString(0.999);StringIntString=49;StringCha
4、rString='A';Label1->Caption="Thisisatest";doubled=3.14*20;Edit1->Text=d;也许你对细节不感兴趣,但需要直接赋值时,C++编译器在后台采用相应的AnsiString构造器。以下列语句为例:StringS=127.123;//createanAnsiStringfromadouble编译器在后台产生如下语句:StringS=String((double)127.123;因此,AnsiString构造器在直接赋值时要进行换算。上述代码可以工作的另一原因是AnsiString类重载了赋值操作符(=
5、)。AnsiString还重载了接合(+操作符)和测试等式(==操作符)等操作符,从而简化工作。AnsiString类和其它C++类一样,有许多使字串操作更方便。下表列出几个最常用的AnsiString方法,如果需要AnsiString方法的完整清单,请看C++Builder联机帮助。C_str返回字串的数据的指针(char*)Delete删除字串的一部分Insert在现有字串的指定位置插入文本Length返回字串长度,不包括终止NULLLowerCase将字串变成小写Pos返回搜索字串在字串中的位置SubString返回字串中从指定位置开始、指定长度的子串
6、ToDouble将字串变成浮点数,如果无法将字串变成浮点数,则扔出异常ToInt将字串变成整数,如果无法将字串变成整数,则扔出异常ToIntDef将字串变成整数并在不能换算时提供缺省值而不扔出异常Trim删除字串前后的空格UpperCase将字串变成大写其中几个方法需要特别说明。一个是c_str()方法,这个奇怪的方法名用于要取得AnsiString的字串缓冲区指针时。为什么要这么干呢?有些WindowsAPI函数需要char*参数。AnsiString是个类,不能直接将AnsiString传递给需要字符数组指针的函数。例如,如果使用WindowsAPI函数
7、DrawText(),则要用如下代码:RECTRRect(0,0,100,20);//first,theCwaycharbuff[]="Thisisatest";DrawText(Canvas->Handle,buff,1,&R,DT_SINGLELINE);//nowtheVCLwayStringS="Thisisatest";DrawText(Canvas->Handle,S.c_str(),1,&R,DT_SINGLELINE);DrawText()函数的第二个参数需要字串缓冲区指针,这就要靠c_str()方法提供。如果不理解,可以等以后再回头理解。目
8、前不必对DrawText()太费心。这个例子说明VC
此文档下载收益归作者所有