天天看點

C++ Builder 初學問與答(十六)

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;

  (未完待續)

繼續閱讀