[ Pobierz całość w formacie PDF ]

przypisania. Również porównanie dwóch łańcuchów zapisywane jest identycznie, przy
czym  wewnętrznie odbywa się ono przez porównanie kodów odpowiadających sobie
znaków. Tak więc:
'C'
'c' > 'Pascal' (kod ASCII znaku 'c' jest większy od kodu 'P')
'C' > '' (dowolny łańcuch jest większy od łańcucha pustego)
Z rzeczy prostych pozostało jeszcze dodawanie łańcuchów, polegające na ich zwykłym
 sklejaniu (niestety, łańcuchów nie da się odejmować, mnożyć ani dzielić). Jeżeli
zmienna lancuch1 zawiera tekst 'Turbo', zaś lancuch2  tekst 'Pascal', to
wynikiem sklejenia obu zmiennych:
wynik := lancuch1 + lancuch2;
będzie oczywiście tekst 'TurboPascal'.
Również odwołania do poszczególnych znaków łańcucha realizuje się w sposób ele-
mentarny. Ponieważ może on być traktowany jako tablica znaków, instrukcja
s[5] := 'x'
wstawi znak x na piątą pozycję w łańcuchu s.
Bardziej wymyślne operacje na łańcuchach wymagają użycia specjalnie do tego celu
przeznaczonych funkcji, z których najważniejsze opisano poniżej:
Length(s)  zwraca bieżącą długość łańcucha s;
Concat(s1, s2)  skleja łańcuchy s1 i s2 (podobnie, jak operator +)
Copy(s, m, n)  zwraca podłańcuch o długości m znaków wycięty z łań-
cucha s poczynając od pozycji n;
Pos(ch, s)  zwraca numer pozycji, na której w łańcuchu s znajduje
się znak ch;
Delete(s, m, n)  usuwa n znaków z łańcucha s poczynając od pozycji m.
Jak powiedziano wyżej, aktualną długość łańcucha można odczytać funkcją Length
(lub przez bezpośrednie odwołanie do zerowej komórki łańcucha). Aby zmienić
długość dynamiczną łańcucha, musisz użyć konstrukcji
s[0] := chr[n]
gdzie n jest żądaną długością (ponieważ łańcuch składa się ze znaków, musimy
przekształcić liczbę n na odpowiadający jej znak funkcją chr). Ponieważ operacja ta
czasem przynosi niezbyt pożądane efekty, lepiej jej unikać.
112 Turbo Pascal  programowanie
Przytoczony poniżej program Lancuchy demonstruje niektóre możliwości obróbki
łańcuchów i w zasadzie nie wymaga dodatkowego komentarza. Poza wywołaniami
opisanych wyżej procedur znalazła się w nim również funkcja UpCase,
przekształcająca małą literę alfabetu na dużą. Operuje ona co prawda na typie
znakowym, jednak typowe jej zastosowanie sprowadza się do konwersji całych
łańcuchów, jak pokazano niżej.
program Lancuchy;
const
TP = 'Turbo Pascal to bomba';
var
s1, s2 : string;
i : integer;
begin
s1 := TP; { przypisanie }
for i := 1 to Length(s1) do
writeln(s1);
i := Pos('a', s1); { wyszukanie znaku }
s2[i] := '^'; { wstawienie znaku }
writeln(s1);
for i := Length(s1) downto 1 do
write(s1[i]);
writeln;
for i := 1 to Length(s1) do { zamiana na
write(UpCase(s1[i]));
writeln;
for i := Length(s1) downto 1 do
begin
writeln(s1);
end;
end.
Na zakończenie tego rozdziału wspomnimy o alternatywnej metodzie reprezentowania
danych tekstowych  tak zwanych łańcuchach zakończonych zerem (ang. null-
terminated string), zwanych też ASCIIZ. Aańcuch ASCIIZ (podobnie jak string) jest
zwykłą tablicą znaków, jednak nie posiada pola przechowującego długość; w zamian za
Aańcuchy 113
to jego koniec sygnalizowany jest znakiem o kodzie 0 (nie mylić ze znakiem  0 ).
Efektywna pojemność łańcucha ASCIIZ ograniczona jest wielkością dostępnej pamięci
(w praktyce do 64 kB) a więc jest znacznie większa, niż dla typu string.
Aańcuchy ASCIIZ (dostępne począwszy od wersji 7.0 Turbo Pascala) deklarowane są
jako zwykłe tablice znaków indeksowane od zera, np.:
var
BardzoDlugiLancuch : array[0..10000] of char;
Elementarna obsługa łańcuchów ASCIIZ (wczytywanie, wyprowadzanie, przypisywa-
nie) realizowana jest tak samo, jak dla zwykłych łańcuchów, pod warunkiem włączenia
tzw. rozszerzonej składni dyrektywą kompilatora {$X+} (Options-Compiler-Extended
Syntax). Bardziej złożone operacje na łańcuchach ASCIIZ (kopiowanie,
porównywanie, przeszukiwanie, konwersja do typu string i vice versa) realizowane są
przez procedury zawarte w module bibliotecznym Strings (o modułach wkrótce) i nie
będą tu omawiane. Warto wreszcie wspomnieć o typie wskaznikowym PChar,
umożliwiającym manipulowanie na dynamicznie tworzonych i usuwanych łańcuchach
ASCIIZ.
Ponieważ w większości przypadków typ string znakomicie spełnia swoje zadanie,
poprzestaniemy na powyższych wzmiankach, odsyłając zainteresowanych Czytelników
do systemu pomocy i literatury [2, 3]. W następnym rozdziale zajmiemy się problemem
braku pamięci, czyli wspomnianym przed chwilą dynamicznym tworzeniem i usuwa-
niem zmiennych.
Zapamiętaj
" Do przechowywania danych tekstowych (napisów) służy w Turbo Pascalu typ
string.
" Aańcuch typu string jest specyficzną tablicą o pojemności do 255 znaków,
przy czym bieżąca długość łańcucha przechowywana jest w zerowej komórce
tablicy.
" Zakres podstawowych operacji na łańcuchach obejmuje wprowadzanie, wypro-
wadzanie, przypisywanie i porównywanie (realizowane za pomocą  standar-
dowych procedur i operatorów).
" Bardziej zaawansowane operacje na łańcuchach to kopiowanie, przeszukiwanie,
wycinanie i skracanie. Operacje te realizowane są za pomocą specjalnych funkcji [ Pobierz całość w formacie PDF ]

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • thierry.pev.pl
  •