DelphiXE下的字串變化

2021-06-23 02:27:44 字數 2373 閱讀 9872

字串型別用於描述乙個單獨的書面的文字和符號。

一、字元型別

delphi支援ansichar和widechar兩種基本的字元型別。ansichar型別變數使用單位元組來表示乙個字元,widechar使用兩個位元組來表示乙個字元。widechar和ansichar型別的變數之間不能相互賦值,例:

varwch: widechar;

ach: ansichar;

begin

ach := '國'; //錯誤。ach占用乙個位元組,而漢字占用兩個位元組。但編譯器不會提示。

ach := wch; //錯誤。編譯器會自動提示型別不匹配。

end;

delphi中最常用的字元型別是char型別。它是上面兩種字元型別其中一種的別名。delphixe中,char預設為widechar,但在之前的版本如delph7中,char型別代表ansichar。所以在使用時要特別注意。

二、字串型別

字串表示由字元組成的序列。delphi中常用的字串型別主要有四種:shortstring、ansistring、widestring、unicodestring。四種字串的簡要資訊如下:型別

最大長度 

所需記憶體 

用途 shortstring

255 byte

2-256 byte 

容納ansichar 

ansistring

2gb4-2gb 

容納ansichar 

widestring

2gb4-2gb

容納widechar

unicodestring

2gb4-2gb 

容納unicode碼字元

其中,unicodestring和widestring基本無區別。delphi在程式設計中通常講字串宣告為string型別,此型別與unicodestring型別完全等價。在較早的版本中string等價於ansistring型別。

注意:delphixe中使用unicodestring下標引用得到的字元的值,而使用ansistring下標引用得到的卻是位元組的值。

1、shortstring

又稱為短字串(相對的其他三種型別稱為長字串),其實質上是乙個編譯器內建的字元陣列,類似下面的**(但是不等效)

type

shortstring = array[0.255] of ansichar;

其容納由256個ansichar組成的字串,但第乙個字元有特殊用途,所以shortstring型別的字串長度不能超過255byte。

shortstring的第乙個位元組的值等於字串的實際長度。所以獲取shortstring字串的實際長度有兩種:一是利用標準函式length();二是直接用第乙個位元組的值。例如:

varstr: shortstring;

str1: array[0..255] of ansichar;

begin

str := 'abcdefg';

str1 := 'abcdefg';

showmessage(inttostr(integer(str[0]))); //顯示7

showmessage(inttostr(length(str))); //顯示7

showmessage(inttostr(sizeof(str))); //顯示256

showmessage(str[1]); //顯示a

showmessage(str1[0]); //顯示a

end;

2、ansistring

是delphi最常用的型別,此型別的字串由ascii擴充套件字符集組成。很顯然,這種型別字串不能用於不同語言版本的作業系統,否則會出現一堆亂碼。

ansistring實質上是乙個指標型別,與普通的指標不同,此型別的指標專用於指向字串。利用標準函式sizeof()可知此型別變數在記憶體中占用4個位元組。所以ansistring最小值為4byte,而非0byte,也就是說,乙個空字串占用4個位元組。

由於ansistring型別的字串占用的空間最大可達2gb,為了節約記憶體,delphi將ansistring字串的本身分配在堆中,而在棧中留下乙個指向字串的指標,這個指標就是ansistring型別的變數。使用字串索引時要注意,索引應該從1開始,因為0索引的值標識了這個字串的長度。對ansistring型別字串進行索引只能得到某個位元組,而不一定是某個字元的值。如:

varstr: ansistring;

begin

str := '中國';

showmessage(str[1]);//顯示?

end;

str[1]不表示「中」,因為漢字在ascii擴充套件字符集中由兩個位元組組成,所以str[1]只能得到「中」的第乙個位元組。

DelphiXE3下的字串

在delphi中,我們常用string來宣告字串.procedure teststringfordelphi varstrname string nlenname integer begin strname 中國a nlenname length strname showmessage 字串 str...

delphi XE的字串處理

最近用delphi xe做了個東西,因為以前一直使用delphi 7做開發,delphi 7 到delphi xe有了很大的變化,最大的變化就是對unicode的支援,所以剛開始使用delphi xe時還有些不太習慣,尤其在字串處理的時候。delphi xe 增加了unicodestring 型別,...

字串型別的變化

1.format 方法的基本使用 模板字串 format 逗號分隔的引數 模板字串有一系列槽組成,用來控制修改字串中嵌入值出現的位置,其基本思想是將format 方法中逗號分隔的引數按照序號關係替換到模板字串的槽中槽用 表示,如果大括號中沒有序號則按照出現順序替換。如果大括號中指定了使用引數的序號,...