16.C/C++語言在CB中的一些特定用法
2)AnsiString是從Delphi中引進來的嗎?
答:CB的核心元件VCL是用Object Pascal語言寫出的,是以CB的VCL元件的屬性有很多都是使用long string,例如:Text、 Name、Caption等屬性都是使用Object Pascal的long string。基于此關系,CB隻好建立了和Object Pascal的long string相應的類别,我們将它稱為AnsiString。
3)AnsiString與String有什麼差別?
答: C++ Builder在Sysdefs.h頭檔案中有這樣的定義:
typedef AnsiString String;
從這一點在看他二者是完全一樣的,隻是書寫起來後者更友善一些,前者是意圖更明了一些。
4)能介紹一下AnsiString類的一些常見函數及其用法嗎?
答:當然可以了,下面就常見函數做一下簡單介紹:
成員函數
文法
功能
c_str
char *_fastcall c_str() const
傳回字元串資料的指針
Delete
void _fastcall Delete(int index,int count)
由index處開始删除count個字元
Insert
void _fastcall Insert(const AnsiString& str,int index)
由index處開始插入字元str到原字元串中
IsEmpty
bool _fastcall IsEmpty() const
傳回字元串是否為空,true表示空字元串
Length
int _fastcall Length() const
傳回字元串長度
LowerCase
AnsiString _fastcall LowerCase() const
将字元串中的大寫字母改寫成小寫
UpperCase
AnsiString _fastcall UpperCase() const
将字元串中的小寫字母改寫成大寫
Pos
int _fastcall Pos(cont AnsiString& substr)const;
找出子字元串在原字元串中由第幾個位置開始
SubString
AnsiString _fastcall SubString(int index,int count)const
傳回由index處向後取count個字元
ToDouble
double _fastcall ToDouble() const
将字元轉成雙精度數值
ToInt
int _fastcall ToInt() const
将字元轉成整形
IntToStr
AnsiString _fastcall IntToStr(int Value)
将整形轉成字元串
Trim
AnstString _fastcall Trim() const
傳回一個新的字元串,它會将原字元串前後空白或控制字元清除後再傳回
WideChar
wchar_t fastcall WideChar(wchart* dest,int destsize)const
轉換AnsiString到一個寬字元數組(COM中常用)
5)AnstString成員函數與傳統字元串函數有何不同之處?
答:我們可以通過二者的一個對照表來檢視他們的之間的不同之處:
AnsiString成員函數
傳統字元串函數
=
字元串拷貝
strcpy
+=
字元串合并
strcat
+
字元串連接配接
無
==,!+=,<,<=,>,>=
字元串比較
strcmp
c_str()
互相轉換
無,但可以利用指針實作
删除子字元串
插入子字元串
求字元串長度
strlen
字母轉成小寫
strlwr
找出子字元串
strstr
SetLength
設定字元串長度
轉成整形
轉成雙精度
sprintf
字母轉成大寫
strupr
6)如何實作傳統字元串與AnsiString字元串的互相轉換?
答:傳統的C語言是使用字元來組成字元串的(字元串末尾必須有’/0’做為結束标志),其格式和AnsiString并不相同。由于在CB中我大量使用AnsiString格式,是以有時也難免要進行一些轉換,我們可以通過下列三種方法來實作:
方法1:AnsiString字元串轉換成字元串數組:
先利用AnsiString類别中的c_str()方法轉換成傳統字元串數組,再用strcpy拷貝,将它拷貝到字元數組中去:
char s1[20];
strcpy(s1,Edit1->Text.c_str());
方法2:AnsiString轉換成傳統字元串可以利用字元指針來實作:
可以通過字元指針來實作:
char *s;
s=Edit->Text.c_str();
方法3:利用字元指針實作傳統字元串轉換成AnsiString:
char *s=”試一試,看看能不能成功!”;
Edit->Text=s;
(未完待續)
本文轉自yonghu86 51CTO部落格,原文連結:http://blog.51cto.com/yonghu/1321409,如需轉載請自行聯系原作者