Sunteți pe pagina 1din 5

4.2.

Tipuri de date ir de caractere


n limbajul standard tipul de date ir de caractere
reprezint un caz special al tipului array i se definete
printr-o construcie de forma
<Nume tip>::= packed array [1..n] of char;
Mulimea de valori a tipului este format din toate irurile ce
conin exact n caractere.
Exemplu:
Program P80;
{ iruri de caractere de lungime constant }
type Nume=packed array[1..8] of char;
Prenume=packed array[1..5] of char;
var N : Nume;
P : Prenume;
begin
N:='Munteanu';
P:='Mihai';
writeln(N);
writeln(P);
readln;
end.
Rezultatul efiat la ecran:
Munteanu
Mihai
ntru-ct irurile de lungime diferit aparin unor tipuri
distincte de date, n cadrul programului P80 nu snt admise
atribuiri de genul
N:= 'Olaru';
P:= 'Ion'.
n astfel de cazuri, programatorul va completa datele respective
cu spaiul pn la numrul stabilit de caractere n, de
exemplu:
N:= 'Olaru ';
P:= 'Ion ';
Valorile unei variabile v de tip packed array [1..n] of char pot
fi introduse de la tastatur numai prin citirea separat a
componentelor respective:
read(v[1]); read(v[2]); ...; read(v[n]).
n schimb, o astfel de valoare poate fi afiat n totalitatea ei
printr-un singur apel write(v) sau writeln(v).
Subliniem faptul, c irurile de caractere de tip packed array
[1..n] of char conin exact n caractere, adic snt iruri de
lungime constant. Evident, lungimea lor nu poate fi modificat
pe parcursul derulrii programului respectiv. Acest fapt complic
elaborarea programelor destinate prelucrrii unor iruri
arbitrare de caractere.
Pentru a nltura acest neajuns, versiunile actuale ale
limbajului permit utilizarea irurilor de caractere de lungime
variabil.
n Turbo PASCAL un tip de date ir de caractere de lungime variabil
se declar printr-o construcie de forma:
<Nume tip>= string;
sau
<Nume tip>= string[nmax];
unde nmax este lungimea maxim pe care o pot avea irurile
respective. n lipsa parametrului nmax lungimea maximal se
stabilete implicit, obinuit 255 de caractere.
Asupra irurilor de tip string se poate efectua operaia de
concatenare (juxtapunere), notat prin "+". Lungimea curent a
unei valori v de tip string poate fi aflat cu ajutorul functiei
predefinite length(v) care returneaz o valoare de tip integer.
Indiferent de lungime, toate irurile de caractere de tip string
snt compatibile.
Exemplu:
Program P81;
{ iruri de caractere de lungime variabil }
type Nume=string[8];
Prenume=string[5];
NumePrenume=string;
var N : Nume;
P : Prenume;
NP : NumePrenume;
L : integer;
begin
N:='Munteanu'; L:=length(N); writeln(N, L:4);
P:='Mihai'; L:=length(P); writeln(P, L:4);
NP:=N+' '+P; L:=length(NP); writeln(NP, L:4);
N:='Olaru'; L:=length(N); writeln(N, L:4);
P:='Ion'; L:=length(P); writeln(P, L:4);
NP:=N+' '+P; L:=length(NP); writeln(NP, L:4);
readln;
end.
Rezultatele afiate la ecran:
Munteanu 8
Mihai 5
Munteanu Mihai 14
Olaru 5
Ion 3
Olaru 9
Se observ, c pe parcursul derulrii programului n studiu
lungimea irurilor de caractere N, P i NP se schimb.
Asupra irurilor de caractere snt admise operaiile relaionale <,
<=, =, >=, >, <>. irurile se compar component cu component de la
stnga la dreapta n conformitate cu ordonarea caracterelor n tipul
de date char (vezi paragraful 2.5). Ambii operanzi trebuie
s fie de tip packed array[1..n] of char cu acelai numr
de componente sau de tip string. Evident, operanzii de tip
string pot avea lungimi arbitrare.
De exemplu, rezultatul operaiei 'AC'<'BA' este true, iar rezultatul
operaiei 'AAAAC'<'AAAAB' este false.
O variabil de tip ir de caractere poate fi folosit fie n
totalitatea ei, fie parial, prin referirea unui caracter din
ir.
De exemplu, pentru P='Mihai' avem P[1]='M', P[2]='i', P[3]='h'
.a.m.d. Dup executarea secvenei de instruciuni
P[1]:='P'; P[2]:='e'; P[3]:='t'; P[4]:='r'; P[5]:='u'
variabila P va avea valoarea 'Petru'.
Programul ce urmeaz citete de la tastatur iruri arbitrare de
caractere i afieaz la ecran numrul de spaii n irul
respectiv. Derularea programului se termin dup introducerea
irului 'frit'.
Program P82;
{ Numrul de spaii ntr-un ir de caractere }
var S : string;
i, j : integer;
begin
writeln('Dai iruri de caractere:');
repeat
readln(S);
i:=0;
for j:=1 to length(S) do
if S[j]=' ' then i:=i+1;
writeln('Numrul de spaii=', i);
until S='Sfrit';
end.
ntrebri i exerciii
1. Cum se definete un tip de date ir de caractere?
2. Ce operaii pot fi efectuate asupra irurilor de caractere?
3. Comentai urmtorul program:
Program P83
4. Elaborai un program care:
a) determin numrul de apariii a caracterului 'A' ntr-un ir;
b) substituie caracterul 'A' prin caracterul '*';
c) radiaz din ir caracterul 'B';
d) determin numrul de apariii a silabei 'MA' ntr-un ir;
e) substituie silabele 'MA' prin silaba 'TA';
f) radiaz din ir silaba 'TO';
5. Precizai rezultatul operaiilor relaionale:
a) 'B' < 'A';
b) 'BB' > 'AA';
c) 'BAAAA' < 'AAAAA';
d) 'CCCCD' > 'CCCCA';
e) 'A A' = 'AA';
f) 'BB ' < 'B B';
g) 'A' = 'a';
h) 'Aa' > 'aA';
i) '123' = '321';
j) '12345' > '12345';
6. Se consider siruri de caratere formate din literele mari ale
alfabetului latin i spaii. Elaborai un program care afieaz
irurile n studiu dup urmtoarele reguli:
- fiecare liter de la 'A' pn la 'Y' se nlocuiete prin urmtoarea
liter din alfabet;
- fiecare liter 'Z' se nlocuiete prin litera 'A';
- fiecare spaiu se nlocuiete prin '-'.
7. Elaborai un program care descifreaz irurile cifrate conform
regulilor din exerciiul 6.
8. Se consider m, m<=100, iruri de caractere formate din
literele mici ale alfabetului latin. Elaborai un program care
afieaz la ecran irurile n studiu n ordine alfabetic.
9. irul S este compus din cteva propoziii, fiecare
terminndu-se cu punct, semn de exclamare sau semnul ntrebrii.
Elaborai un program care afieaz la ecran numrul de proroziii
din irul n studiu.

S-ar putea să vă placă și