Strängtyper i Delphi

Som med alla programmeringsspråk, i Delphivariabler är platshållare som används för att lagra värden; de har namn och datatyper. Datatypen för en variabel avgör hur bitarna som representerar dessa värden lagras i datorns minne.

När vi har en variabel som kommer att innehålla en rad tecken, kan vi förklara att den är av typSträng.
Delphi erbjuder ett friskt sortiment av strängoperatörer, funktioner och procedurer. Innan vi tilldelar en stringdatatyp till en variabel måste vi förstå Delphis fyra strängtyper grundligt.

Kort sträng

Enkelt uttryckt, Kort sträng är en räknad matris med (ANSII) tecken, med upp till 255 tecken i strängen. Den första byten i den här matrisen lagrar strängens längd. Eftersom detta var huvudsträngstypen i Delphi 1 (16 bitars Delphi), är det enda skälet att använda Short String för bakåtkompatibilitet.
För att skapa en variabel ShortString-typ använder vi:

var s: ShortString; s: = 'Delphi-programmering'; // S_Length: = Ord (s [0])); // vilket är samma som Längd (er)
instagram viewer


De s variabel är en variabel med kort sträng som kan innehålla upp till 256 tecken, dess minne är en statiskt tilldelad 256 byte. Eftersom detta vanligtvis är slöseri - troligt kommer din korta sträng att spridas till maximal längd - sekund tillvägagångssätt för att använda korta strängar använder undertyper av ShortString, vars maximala längd är någonstans från 0 till 255.

var ssmall: String [50]; ssmall: = 'Kort sträng, upp till 50 tecken';

Detta skapar en variabel som heter ssmall vars maximala längd är 50 tecken.

Obs: När vi tilldelar ett värde till en variabel för kort sträng, trunkeras strängen om den överskrider den maximala längden för typen. När vi skickar korta strängar till vissa Delphis strängar som hanterar rutin, konverteras de till och från lång sträng.

Sträng / Lång / Ansi

Delphi 2 fördes till Object Pascal Lång sträng typ. Lång sträng (i Delphis hjälp AnsiString) representerar en dynamiskt tilldelad sträng vars maximala längd endast är begränsad av tillgängligt minne. Alla 32-bitars Delphi-versioner använder som standard långa strängar. Jag rekommenderar att du använder långa strängar när du kan.

var s: Sträng; s: = 'Strängen s kan vara av valfri storlek ...';

De s variabel kan innehålla från noll till vilket praktiskt antal tecken som helst. Strängen växer eller krymper när du tilldelar ny data till den.

Vi kan använda valfri strängvariabel som en rad tecken, det andra tecknet i s har indexet 2. Följande kod

s [2]: = 'T';

tilldelar T till det andra tecknet os s variabel. Nu är de få av de första karaktärerna i s ser ut som: De str ....
Bli inte vilseledande, du kan inte använda s [0] för att se strängens längd, s är inte ShortString.

Referensräkning, kopia-på-skriva

Eftersom minnesallokering görs av Delphi, behöver vi inte oroa oss för sopor. När du arbetar med långa (Ansi) strängar använder Delphi referensräkning. Detta sätt strängkopiering är faktiskt snabbare för långa strängar än för korta strängar.
Referensräkning, med exempel:

var s1, s2: String; s1: = 'första strängen'; s2: = s1;

När vi skapar sträng s1 variabel, och tilldela något värde till den, Delphi tilldelar tillräckligt med minne för strängen. När vi kopierar s1 till s2, Delphi kopierar inte strängvärdet i minnet, det ökar bara referensräkningen och ändrar s2 att peka på samma minnesplats som s1.

För att minimera kopiering när vi skickar strängar till rutiner använder Delphi copy-on-write-teknik. Anta att vi ska ändra värdet på s2 strängvariabel; Delphi kopierar den första strängen till en ny minnesplats, eftersom ändringen endast bör påverka s2, inte s1, och båda pekar på samma minnesplats.

Bred sträng

Bred strängar fördelas och hanteras dynamiskt, men de använder inte referensräkning eller kopia-på-skriva semantik. Bred strängar består av 16-bitars Unicode-tecken.

Om Unicode-teckenuppsättningar

ANSI-teckenuppsättningen som används av Windows är en teckenuppsättning med en byte. Unicode lagrar varje tecken i teckenuppsättningen i 2 byte istället för 1. Vissa nationella språk använder ideografiska tecken, som kräver mer än de 256 tecknen som stöds av ANSI. Med 16-bitars notation kan vi representera 65 536 olika tecken. Indexering av multibytsträngar är inte tillförlitlig eftersom si] representerar ith byte (inte nödvändigtvis den i-th karaktär) i s.

Om du måste använda breda tecken, bör du förklara att en strängvariabel är av typen WideString och din teckenvariabel av typen WideChar. Om du vill undersöka en bred sträng ett tecken i taget, se till att testa för multibitstecken. Delphi stöder inte automatiska konverteringar av typ mellan Ansi och breda strängtyper.

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

Null avslutad

En noll- eller nollavslutad sträng är en grupp tecken, indexerade av ett heltal som börjar från noll. Eftersom matrisen inte har någon längdindikator använder Delphi ASCII 0 (NULL; # 0) tecken för att markera strängen.
Detta betyder att det väsentligen inte finns någon skillnad mellan en noll-avslutad sträng och en matris [0..NummerOfChars] av typen Char, där strängens slut markeras med # 0.

Vi använder nollavslutade strängar i Delphi när vi kallar Windows API-funktioner. Objekt Pascal låter oss undvika att röra oss med pekare till nollbaserade matriser när vi hanterar nollavslutade strängar med PChar-typen. Tänk på en PChar som en pekare till en noll-avslutad sträng eller till matrisen som representerar en. För mer information om pekare, kolla:Pekare i Delphi.

Till exempel The GetDriveType API-funktion avgör om en hårddisk är en flyttbar, fast, CD-ROM, RAM-skiva eller nätverksenhet. Följande procedur visar alla enheter och deras typer på en användares dator. Placera en knapp och en memo-komponent på ett formulär och tilldela en OnClick-hanterare av en knapp:

procedur TForm1.Button1Click (avsändare: TObject); var
Drive: Char; DriveLetter: String [4]; Börjaför Drive: = 'A' till 'Z' doBörja
DriveLetter: = Drive + ': \'; fall GetDriveType (PChar (Drive + ': \')) av
DRIVE_REMOVABLE: Memo1.Lines. Lägg till (DriveLetter + 'Floppy Drive'); DRIVE_FIXED: Memo1.Lines. Lägg till (DriveLetter + 'Fixed Drive'); DRIVE_REMOTE: Memo1.Lines. Lägg till (DriveLetter + 'Network Drive'); DRIVE_CDROM: Memo1.Lines. Lägg till (DriveLetter + 'CD-ROM Drive'); DRIVE_RAMDISK: Memo1.Lines. Lägg till (DriveLetter + 'RAM Disk'); slutet; slutet; slutet;

Blanda Delphis strängar

Vi kan fritt blanda alla fyra olika slags strängar, Delphi ger det är bäst att förstå vad vi försöker göra. Uppdraget: = p, där s är en strängvariabel och p är ett PChar-uttryck, kopierar en noll-avslutad sträng till en lång sträng.

Karaktärstyper

Förutom fyra strängdatatyper har Delphi tre teckentyper: Röding, AnsiChar, ochWideChar. En strängkonstant med längd 1, såsom 'T', kan beteckna ett teckenvärde. Den generiska karaktärstypen är Char, vilket motsvarar AnsiChar. WideChar-värden är 16-bitars tecken som ordnas enligt Unicode-teckenuppsättningen. De första 256 Unicode-tecknen motsvarar ANSI-tecknen.

instagram story viewer