Sunteți pe pagina 1din 6

iruri de caractere (Pascal)

Un sir de caractere in Pascal reprezinta o succesiune de caractere cuprinsa intre


apostrofuri.
Declarare
x: string[nr];
{unde nr = 1 ... 255}
a: string[25];
b: string;
Observatii
daca este specificata dimensiunea maxima a sirului de caractere, atunci
compilatorul va aloca un numar nr de octeti ptr. aceasta variabila (1 octet pentru
fiecare caracter)
daca dimensiunea nu este specificata atunci compilatorul va aloca dimensiunea
maxima , adica 255 de caractere.
Daca valoarea ce i se atribuie unui sir de caractere depaseste lungimea maxima a
sirului, atunci sirul de caractere va primi o valoare trunchiata din valoarea initiala
egala cu lungimea maxima a sa.
Exemple:
a) s:string[3];
s:=123ac => s=123;
b) s:string;
s:=abcde=>s=abcde;
c) s=
-stringul de lungime 0;

Operatii cu siruri de caractere


1) Concatenarea a doua sau mai multe siruri de caractere - se realizeaza folosind
operatorul +.
s:string;
s:=ab+ +cde;
s=ab cde
2) Compararea a doua caractere sau a doua siruri de caractere se realizeaza folosind
operatorii relationali: =, <, <=, >, >=, <>.
Compararea a doua siruri de caractere consta in compararea lexicografica. Se compara
codurile ASCII ale caracterelor corespondente: primul caracter din primul sir cu primul
caracter din al doilea sir, etc.
1

Functii predefinite pentru stringuri


1) functia LENGTH(sir) returneaza lungimea unui sir de caractere
length(s4nrt) = 5
Observatii Parcurgerea elementelor unui sir de caractere
Fie programul:
var
s : string;
begin
write(dati un sir de caractere);
readln(s);
writeln(aracterele sunt: );
for i:= 1 to length(s) do
write(s[i], );
end.
Explicatii: s[i] este caracterul de pe pozitia i;
2) functiile ord si chr
ORD(caracter) returneaza codul ASCII al caracterului
CHR(numar) returneaza caracterul corespunzator codului ASCII
Relatia de legatura intre codul ASCII al caracterelor mari si codul ASCII al caracterelor
mici:
Cod ASCII(caracter mare) + 32 = Cod ASCII(caracter mic)
Exemplu: ord(A) = 65
ord(a) = 97
3) functia POS(sir1, sir2) verifica daca sirul 1 se situeaza in sirul 2 si returneaza pozitia
de inceput in sirul 2 daca exista sau 0 daca sirul 1 nu se afla in sirul 2.
pos(a,deasr) = 3
3) functia COPY(sir, poz, nr) extrage un subsir al primului sir, incepand de la pozitia poz
si avand un numar nr de caractere.
Observatii:
Daca poz este mai mare decat length(sir) atunci sirul rezultat va fi sirul vid. Daca nr este
mai mare decat numarul de elemente de dupa poz, atunci se vor prelua doar caracterele
ramase.
copy(asdf, 3, 2) = df
copy(art, 3, 2) = t
2

4) functia CONCAT(c1,c2,,cn) concateneaza sirurile c1,c2,,cn


concat (w, Ts) = wTs

Proceduri predefinite pentru siruri de caractere


1) DELETE(sir, poz, nr) sterge din primul sir incepand cu pozitia poz, un numar nr de
caractere
Observatie
1) Daca poz > length(sir) atunci nu se sterge nimic.
2) Daca nr > numarul de caractere ramase, atunci se vor sterge doar caracterele ramase.
Exemple
S= vaza;
1) delete(S, 2, 2) -> S=va;
2) delete(S, 7, 3)-> S=vaza;
3) delete(S, 3, 7) -> S=va
2) INSERT(subsir, sir, poz) insereaza subsirul dat in sirul sir incepand din pozitia poz.
Observatii
a) Daca pozitia este mai mare decat length(sir) , atunci subsirul se insereaza la sfarsitul
sirului .
subsir=XX; sir=teza;
insert(subsir, sir, 30) -> sir = tezaXX;
insert(subsir, sir, 2) -> sir = tXXeza.
b) Daca lungimea sirului + lungimea subsirului depaseste lungimea de definitie a sirului
sir, atunci lungimea sirului se pastreaza la lungimea de definitie
sir:string[4];
sir=teza;
subsir=XX;
insert(subsir, sir, 2) -> sir = tXXa.
3) STR(numar, sir)
Transforma variabila numar intr-un sir de caractere.
34 -> 34
4) VAL(sir, numar, eroare)
Incearca sa transforme sirul de caractere sir intr-un numar real. Daca reuseste atunci
parametrul eroare va avea valoarea 0, daca nu reuseste valoarea parametrului numar=0,
eroare va avea pozitia de unde incepe nereusita.
3

Val(12.3, numar, eroare) -> eroare=0


->numar=12.3
Val(12,3, numar, eroare) ->eroare=3
->numar=0.

APLICATII
1) Sa se afiseze toate prefixele unui cuvant.
Exemplu:
Cuvantul este: axp
Prefixele:
a
ax
axp
Var cuv:string;
n,i:integer;
Begin
write(Cuvantul este:);
readln(cuv);
n := length(cuv);
writeln(Prefixele:);
for i:= 1 to n do writeln(copy(cuv, 1, i));
readln;
END.
2) Afisati cate vocale contine un text.
Var text:string;
i,n,nr:integer;
Begin
write(Textul este:);
readln(text);
n:=length(text);
nr:=0;
for i:= 1 to n do
if text[i] in [A,E,I,O,U,a,e,i,o,u] then nr: = nr +1;
writeln(sunt,nr,vocale);
readln;
END.

3) Sa se afiseze toate sufixele unui cuvant.


Var cuv:string;
n,i:integer;
Begin
write(Cuvantul este:);
readln(cuv);
n:=length(cuv);
for i:= n downto 1 do
writeln(copy(cuv,i,n);
readln;
END.
4) Sa se elimine toate spatiile dintr-un text.
Var cuv:string;
i,n:integer;
sw: boolean;
Begin
write('Cuvantul este:');
readln(cuv);
repeat
sw := false;
for i:= 1 to length(cuv) do
if cuv[i]= ' ' then begin
delete(cuv,i,1);
sw := true;
end;
until not(sw);
write('Cuvantul ramas: ',cuv);
readln;
END.
5) Verificati daca un cuvant este palindrom.
Var cuv:string;
i,n:integer;
sw:Boolean;
Begin
write(Cuvantul este:);
readln(cuv);
n:=length(cuv);
sw:= true;
for i:= 1 to n div 2 do
if cuv[i]<>cuv[n-i+1] then sw:=false;
5

if sw then writeln(Cuvantul este palindrom)


else writeln(Cuvantul nu este palindrom);
readln;
END>