Karakterlánctípusok Delphiben

click fraud protection

Mint minden programozási nyelv esetében, itt is Delphi, a változók az értékek tárolására szolgáló helyőrzők; nevek és adattípusok vannak. A változó adattípusa határozza meg, hogy az ezeket az értékeket képviselő bitek hogyan tárolódnak a számítógép memóriájában.

Ha van egy olyan változó, amely valamilyen tömb karaktert tartalmaz, akkor kijelenthetjük, hogy típusaHúr.
A Delphi egészséges választékot nyújt a karakterlánc operátorok, funkciók és eljárások számára. Mielőtt egy karakterlánc-adattípust egy változóhoz rendelnénk, alaposan meg kell értenünk a Delphi négy karakterlánc-típusát.

Rövid karakterlánc

Egyszerűen fogalmazva, Rövid karakterlánc egy (ANSII) karakter számlált tömbje, legfeljebb 255 karakter a karakterláncban. A tömb első bájtja tárolja a karakterlánc hosszát. Mivel ez volt a fő karakterlánc típus a Delphi 1-ben (16 bites Delphi), a rövid karakterlánc használatának egyetlen oka a visszamenőleges kompatibilitás.
A ShortString típusú változó létrehozásához használjuk:

var s: ShortString; s: = 'Delphi programozás'; 
instagram viewer
// S_hossz: = Ord (s [0])); //, amely megegyezik a hossz (ok)


Az s a változó egy rövid karakterláncú változó, amely akár 256 karaktert képes tárolni, memóriája statikusan elosztott 256 bájt. Mivel ez általában pazarló - valószínűtlen, hogy rövid szövege elterjed a maximális hosszúságig - másodperc A rövid karakterláncok megközelítése a ShortString altípusait használja, amelyek maximális hossza 0 és 0 között lehet 255.

var ssmall: Húr [50]; ssmall: = 'Rövid karakterlánc, legfeljebb 50 karakter';

Ez létrehoz egy változót ssmall amelynek maximális hossza 50 karakter.

Megjegyzés: Ha egy értéket rendelünk egy rövid karakterlánc változóhoz, akkor a karakterlánc csonkolódik, ha meghaladja a típus maximális hosszát. Amikor átadunk egy rövid karakterláncot egy Delphi karakterlánc-manipulációs rutinjának, akkor hosszú karakterlánkká konvertáljuk őket.

Húros / Hosszú / Ansi

A Delphi 2-t az Object Pascalhoz vitték Hosszú karakterlánc típus. A hosszú karakterlánc (Delphi segítségével az AnsiString) egy dinamikusan kiosztott karakterláncot jelent, amelynek maximális hosszát csak a rendelkezésre álló memória korlátozza. Az összes 32 bites Delphi verzió alapértelmezés szerint hosszú karakterláncokat használ. Azt javaslom, hogy használjon hosszú húrokat, amikor csak lehet.

var s: húr; s: = 'Az string lehet bármilyen méretű ...';

Az s A változó nullától tetszőleges számú karakterig tarthat. A karakterlánc növekszik vagy zsugorodik, amikor új adatokat rendel hozzá.

Bármely karakterláncváltozót felhasználhatunk karakter tömbként, a második karaktert pedig s rendelkezik a 2. mutatóval. A következő kód

s [2]: = 'T';

jogutódai T a második karakterhez a s változó. Most a néhány első karakter a s hasonló: TTe str ....
Ne légy félrevezető, az s [0] nem használhatja a húr hosszát, s nem ShortString.

Referenciaszámolás, másolás-írás

Mivel a memóriaelosztást a Delphi végzi, nem kell aggódnunk a szemétgyűjtés miatt. Ha a Long (Ansi) húrokkal dolgozik, a Delphi referenciaszámlálást használ. Ily módon a karakterlánc-másolás valóban gyorsabb a hosszú karakterláncok, mint a rövid karakterláncok esetén.
Referenciaszámolás például:

var s1, s2: karakterlánc; s1: = 'első karakterlánc'; s2: = s1;

Amikor húrot hozunk létre s1 változót, és adjon neki értéket, a Delphi elegendő memóriát foglal el a karakterlánc számára. Amikor másolunk s1 nak nek s2, Delphi nem másolja a karakterlánc értéket a memóriában, csak növeli a referenciaszámot és megváltoztatja a s2 ugyanarra a memóriahelyre mutat, mint a s1.

A másolás minimalizálása érdekében, amikor a karakterláncokat átadjuk a rutinoknak, a Delphi copy-on-write technikát alkalmaz. Tegyük fel, hogy meg kell változtatnunk a s2 karakterlánc változó; Delphi másolja az első karakterláncot egy új memóriahelyre, mivel a változásnak csak az s2-re, nem az s1-re kell hatnia, és mindkettő ugyanarra a memóriahelyre mutat.

Széles karakterlánc

A széles vonóságokat szintén dinamikusan osztják el és kezelik, de nem használnak referenciaszámlálást vagy a copy-on-write szemantikát. A széles karakterláncok 16 bites Unicode karakterekből állnak.

A Unicode karakterkészletekről

A Windows által használt ANSI karakterkészlet egybájtos karakterkészlet. A Unicode minden karaktert a karakterkészletben 2 bájtban tárol, az 1 helyett. Egyes nemzeti nyelvek ideográfiai karaktereket használnak, amelyeknél az ANSI által támogatott 256 karakternél többre van szükség. 16 bites jelöléssel 65 536 különböző karaktert reprezentálhatunk. A többbyte karakterláncok indexelése nem megbízható, mivel s [i] az i. bájtot (nem feltétlenül az i. karaktert) jelöli s.

Ha széles karaktereket kell használnia, akkor deklarálnia kell egy karakterláncváltozót WideString típusúvá, és karakterváltozóját a WideChar típusba. Ha egyszerre széles karakterláncot szeretne megvizsgálni, akkor mindenképp ellenőrizze a többbites karaktereket. A Delphi nem támogatja a betwwen Ansi és a Wide string típusok automatikus típusú konvertálását.

var s: WideString; c: WideChar; s: = 'Delphi_ Guide'; s [8]: = 'T'; //s='Delphi_TGuide';

Null megszűnt

A null vagy nulla karakterlánc karakterek tömbje, amelyet nullától kezdődő egész szám indexel. Mivel a tömbnek nincs hosszjelzője, Delphi az ASCII 0 értéket (NULL; # 0) karakter a karakterlánc határának megjelölésére.
Ez azt jelenti, hogy alapvetően nincs különbség a nulla végű karakterlánc és a Char típusú [0..NumberOfChars] tömb között, ahol a karakterlánc végét # 0 jelöli.

Null-terminált karakterláncokat használunk a Delphi-ben, amikor a Windows API-funkciókat hívjuk meg. Az Object Pascal lehetővé teszi, hogy elkerüljük a mutatókkal való körülvételt a zérus alapú tömbökre, amikor a null-végű karakterláncokat a PChar-típus felhasználásával kezeljük. Gondolj egy PChar-ra, mint mutatóra egy null-végû karakterláncra vagy a tömbre, amely azt képviseli. A mutatókkal kapcsolatos további információkért lásd:Mutatók Delphiben.

Például a GetDriveType Az API funkció meghatározza, hogy a merevlemez-meghajtó cserélhető, rögzített, CD-ROM, RAM vagy hálózati meghajtó. Az alábbi eljárás felsorolja az összes meghajtót és típusát a felhasználói számítógépen. Helyezzen egy gombot és egy emlékeztető összetevőt egy űrlapra, és rendeljen hozzá egy gomb OnClick kezelőjét:

eljárás TForm1.Button1Click (Feladó: TObject); var
Hajtás: Char; DriveLetter: Karakterlánc [4]; kezdődikmert Hajtás: = 'A' nak nek 'Z' csinálkezdődik
DriveLetter: = Drive + ': \'; ügy GetDriveType (PChar (Drive + ': \')) nak,-nek
DRIVE_REMOVABLE: Memo1.Lines. Add (DriveLetter + 'floppy meghajtó'); DRIVE_FIXED: Memo1.Lines. Add (DriveLetter + 'Fixed Drive'); DRIVE_REMOTE: Memo1.Lines. Add (DriveLetter + 'hálózati meghajtó'); DRIVE_CDROM: Memo1.Lines. Add (DriveLetter + 'CD-ROM meghajtó'); DRIVE_RAMDISK: Memo1.Lines. Add (DriveLetter + 'RAM lemez'); vég; vég; vég;

Keverés Delphi húrokkal

Szabadon keverhetjük mind a négy különféle húrokat, Delphi azt fogja adni, hogy a legjobban értse meg, mit próbálunk csinálni. Az s: = p hozzárendelés, ahol s egy karakterláncváltozó és p egy PChar kifejezés, a null-végű karakterláncot egy hosszú karakterláncba másolja.

Karakter típusok

Négy karakterlánc-adattípus mellett a Delphi három karaktertípust is tartalmaz: Faszén, AnsiCharésWideChar. Az 1 hosszúságú karakterlánc állandó, például „T” jelölheti a karakter értékét. Az általános karaktertípus Char, amely megegyezik az AnsiChar-tal. A WideChar értékek 16 bites karakterek, amelyek az Unicode karakterkészlet szerint vannak rendezve. Az első 256 Unicode karakter megfelel az ANSI karaktereknek.

instagram story viewer