Sunteți pe pagina 1din 26

Tema:

Tipuri de date șir de


caractere (STRING)
NOȚIUNEA DE ȘIR DE CARACTERE
Limbajul Pascal ne oferă facilită ți pentru prelucrarea unor
cuvinte sau chiar a unor propoziții. Acestea vor fi memorate ca
Ș IRURI DE CARACTERE.

Definiție: Un șir de caractere este o succesiune de caractere cuprinsă


între două apostrofuri și poate să conțină orice caractere: litere mari și
mici, caractere speciale(”#”, ”&”, ”*”, etc.) și delimitatori (virgula,
punctul, etc.).

Exemple: ‘INFORMATICA’, ‘!’, ‘123’, etc.


Modul de definire:
Type <nume_tip> = string;
Var <nume_variabila> :<nume_tip>;
<Nume_variabila> :string;
<Nume_variabila> :string [k];
unde K ESTE O CONSTANTĂ , NUMĂ R NATURAL NENUL ≤
255.
Exemplu: Type nume = string;
Var n:nume;
p:string; s:string [12]
DECLARAREA, CITIREA ȘI AFIȘAREA UNUI ȘIR
DE CARACACTERE
Un astfel de șir de caractere cuprins între apostrofuri poate fi
memorat într-o variabilă de tipul predefinit string. La declararea
unei variabile de tipul string, putem preciza, între parantezele
pă trate, lungimea maximă , adică numă rul maxim de caractere al
șirurilor ce pot fi memorate în variabila respectivă . Dacă nu
indică m lungimea maximă a șirului, atunci compilatorul va stabili
lungimea maximă implicită de 255 de caractere.

Exemplu: Var s: string[25]; - {variabila s poate memora siruri de


lungima maximă de 25 de caractere}
s1:string; - {variabila s1 poate memora siruri de lungima maximă
de 255 de caractere}
CITIREA ȘI AFIȘAREA UNUI ȘIR DE
CARACTERE
Atribuirea valorilor pentru variabilele de tipul string se poate
efectua în două moduri:
1. Prin atribuirea directă ;
2. Prin citirea de la tastatură care se efectuează cu ajutorul
procedurii read/readln.
Numă rul de caractere ale șirului memorat într-o variabilă de tip
string se numește lungimea efectivă a șirului, sau pe scurt –
lungimea șirului. Ș irurile de caractere pot fi afișate cu ajutorul
procedurii write/writeln.
POT APĂREA URMĂTOARELE SITUAȚII :
1. Dacă lungimea efectivă a șirului (numărul efectiv de
caractere) este mai mică decât lungimea maximă a variabilei
(numărul maxim de caractere), atunci ultimele poziții ale
vectorului de caractere aferent vor rămâne neocupate.
2. În schimb, dacă lungimea șirului este mai mare decît
lungimea maximă, atunci șirul va fi trunchiat, reținându-se
atâtea caractere cât este lungimea maximă.
Exemplu: Se declară o variabilă s de tipul string cu lungimea maximă
Program P1; de 10 caractere. În consecință , șirurile ce vor fi efectiv
memorate în s ( prin atribuire sau citire), pot avea cel mult
Var s,s1:string[10];
10 caractere. Pentru aceste caractere sunt rezervate
begin elementele s[1], s[2],…s[10] ale vectorului de caractere s.
s:=‘PROGRAM’; În prima atribuire, variabila s primește ca valoare șirul –
Writeln(s); ‘PROGRAM’. Caracterele acestui șir vor fi memorate
s1:=‘GENERATOARELE’; consecutiv în vectorul de caractere s începînd cu poziția 1.
Writeln(s1);
Astfel, s[1] (caracterul de pe poziția 1) este ‘P’, s[2] este ‘R’ ,
s[3]= ‘O’ ... s[7] = ‘M’. Întrucît sirul ‘PROGRAM’ are numai
End.
șapte caractere, pozițiile 8,9,10 ale vectorului s vor ră mîne
neocupate.

1 2 3 4 5 6 7 8 9 10

s P R O G R A M

În schimb, prin atribuirea s:=‘generatoarele’, variabila s va memora de fapt șirul


‘generatoar’. întrucât lungimea efectivă a șirului ‘generatoarele’ depășește zece caractere
(atât cât este dimensiunea maximă), acesta va fi trunchiat, reținându-se primele zece
caractere din el.
Operații cu șirurile
de caractere
CONCATENAREA ȘIRURILOR:
Concatenarea o două șiruri de caractere s și t înseamnă ”lipirea”
celui de-al doilea șir la sfîrșitul primului. Aceasta se realizează cu
operatorul ”+”.
Atenție însă, concatenarea nu este comutativă!
Astfel, s+t nu este egal cu t+s, așa cum se poate vedea din exemplul
urmă tor. De asemenea, putem concatena un singur caracter sau un
numă r de caractere la sfîrșitul unui șir.
Exemplu: var t,s, l: string;
............
t:= ‘Ana-‘;
s:= ‘Maria‘;
l:=t+s; (l☞ ‘Ana-Maria')
COMPARAREA O DOUĂ CARACTERE:
Limbajul Pascal folosește standardul ASCII, conform
că ruia fiecare caracter se caracterizează printr-un așa-numit
cod ASCII, un întreg cuprins între 0 și 255.
Astfel, caracterele – literele mari ”A”, ”B”, ... ”Z”au
codurile de la 65 la 90, în acestă ordine, caracterele – ”a”, ”b”, ...
”z” au codurile de la 97 la 122, iar caracterele - ”0”, ”1”, ... ”9” au
codurile între 48 și 57.
Câ nd se compară două caractere, calculatorul compară
de fapt codurile lor ASCII. Dacă C1 și C2 sunt două variabile de
tipul Char, atunci: C1<C2 - codul caracterului C1 este mai mic
decît codul caracterului C2
COMPARAREA ȘIRURILOR DE CARACTERE:
Ș irurile de caractere pot fi comparate cu ajutorul operatorilor
relaționali ”<”, ”< =”, ”>”, ”>=”, ”=”, ”<>”. Compararea a două șiruri s și
t vizează ordinea lor alfabetică și se face caracter cu caracter. Se adună
codurile caracterelor primului șir și se compară cu codurile caracterelor
celui de-al doilea șir. În urma comparației se poate ajunge în una din
următoarele situații:
 Primul cod este mai mare, caz în care se consideră primul șir mai
mare decât celălalt;
 Primul cod este mai mic, astfel că primul șir este mai mic;
 Cele două coduri sunt egale.
Exemplu:

1. 'Andrei' < 'Vlad‘, deoarece ord('A') < ord('V‘);


2. ' Stop' < 'Stup' - deoarece ord('o') < ord('u') ;
3. 'Egal' < 'Egal '– deoarece al doilea șir are lungime mai mare.
PROCEDURI ȘI
FUNCȚII PREDEFINITE
PENTRU ȘIRURI DE
CARACTERE
Funcția COPY
Funcția Copy extrage din șirul t dat începâ nd cu poziția p și avînd
lungimea l:
Copy (t,p,l)
Exemplu: var t,s: string;
............
t:= ‘Algoritm‘;
s:= copy (t,5,4); (s☞ ritm)
.............
Funcția copy (t,5,4) “extrage“ din șirul t un subșir de 4 caractere,
începâ nd cu caracterul de pe poziția a 5, adică : “ritm“, pe care îl
returnează .
Funcția POS
Funcția Pos returnează prima poziție a unui subșir s într-un șir t , în caz contrar
returnează valoarea“0“:
Pos (s,t)
Exemplu: var s,t: string;
p:integer;
............
t:= ‘Algoritm‘;
s:= ‘ritm‘;
p:=pos (s,t); (p☞ 5)
p1:=pos (‘greu‘, t) (p1☞ 0)
............
Apelul Pos(s,t), adică pos (‘ritm’, ‘Algoritm’) returnează 5, pentru că șirul ‘ritm’ apare ca
subșir al șirului ‘Algoritm’, începâ nd cu poziția a cincea, deci p=5. În schimb apelul pos
( ‘greu’, t) returnează 0, pentru ca șirul ‘greu‘ nu este subșir al șirului t=‘Algortim’, deci
p1=0.
Funcția CONCAT
Funcția Concat returnează șirul s1+s2+…+sn
Concat (s1, s2 ,…,sn )

Exemplu: var x,y,a: string;


................
x:=‘Tractor‘;
y:=‘ist‘;
a:=concat (x,y ); {a☞Tractorist}
FUNCȚIA LENGTH (S)
Funcția Length returnează lungimea (de tip integer) a șirului s: Length (s)

Exemplu: var x,y: string;


a,b:integer;
................
x:=‘Algoritm‘;
a:=length (x); {a☞8}
y:=‘Vine primavara!‘;
b:=length (y); {b☞15}
.................
Funcțiile ORD și CHR

 Funcția Ord (caracter) returnează codul ASCII al caracterului .


 Funcția Chr (numă r) returnează caracterul corespunză toru codului ASCII.

Exemplu1: Ord(‘A’)=65
Ord(‘a’)=97

Exemplu2: Chr (65)=A


Chr(97)=a
Procedura DELETE
Procedura Delete șterge l simboluri din șirul s începâ nd cu poziția p:
Delete (s,p,l)
Observație!!!
1) Dacă p>length(sir) atunci nu se sterge nimic.
2) Dacă l>length(s)-p+1, atunci se vor șterge length(s)-p+1 caractere.
Exemple:
S=’casa’;
1)delete(S,2,2)->S=’ca’;
2)delete(S,7,3)->S=’casa’;
3)delete(S,3,7)->S=’ca’.

var x,s,s1,b: string;


.............
s:=‘Informatica‘;
x:=delete (s,3,8); {x☞Ina}
s1:=‘Tractor‘;
b:=delete (s1,1,2); {b☞Actor}
Procedura INSERT
Procedura Insert inserează un subșir s în șirul t începînd cu poziția p:
Insert (s,t,p)
Observații!!!
1) Daca poziția este mai mare decâ t length(t) , atunci subșirul se inserează la sfâ rșitul șirului .
s=’rr’; t=’casa’;
insert(s,t,30)->t’casarr’;
insert(s,t,2)->t=crrasa’.
2) Daca lungimea șirului t+ lungimea subșirului s depă șeste lungimea de definitie a sirului “t”,
atunci lungimea șirului t se pă strează la lungimea de definitie (trunk(int)) caracter de după
lungime.
t=’casa’; s=’rr’; t:string[4];
insert(s,t,2)->t=’crra’.
Exemplu: var x,s,t: string;
.............
t:=‘bine‘;
s:=‘ul‘;
x:=insert(s,t,2); {x☞'buline'}
Procedura STR

Procedura STR transformă numă rul n (de tip integer sau real) în șir, pe care îl
memorează în șirul s:
STR (n,s)

Exemplu: var s: string;


n:integer;
.............
n:=314
str (n,s); {s☞'314'}
Procedura VAL
Procedura VAL transformă șirul s în numă r, atribuindu-l lui x (de tip integer sau
real). Tentativa v-a reuși dacă șirul conține numai caractere permise pentru un
numă r, adică cifre, punctul zecimal și caracterul “-“. Prin urmare dacă transformarea
reușește, atunci în parametrul n se memorează numă rul rezultat prin transformare ,
iar parametrul cod v-a primi valoarea “0”; dacă transformarea eșuează , atunci
parametrul n v-a fi nedefinit, iar în parametrul cod se memorează poziția în șir a
primului caracter din cauza că ruia a eșuat transformarea:
VAL(s,n,cod)
Exemplu: var s: string;
n, cod:integer;
.............
s:='341';
val (s,n,cod); {n☞‘341; cod☞0}
s:=‘3#41‘;
val (s,n,cod); {n☞0,cod ☞2}
TRANSFORMAREA LITERELOR MARI ÎN
LITERE MICI ȘI INVERS
Procedura UpCase (c) transformă literele mari în mici și invers
Accente:

1. Un șir poate fi vid, s:=‘’.


2. Tipul de date char este compatibil cu tipul de date string, dar
nu și invers.
3. Accesul la caracterul de pe poziția i se realizează prin
construcția s[i]
4. Valorile variabilelor de tip string se pot introduce de la
tastatură și se pot afișa la ecran.
Sarcină practică 1:
Fie variabilele a și b șir de caractere și i numă r natural.
Secvența de program:
a:='aranjament '+'floral';
b:=' colorat';
insert (b, a, pos(' ',a));
i:=pos('ora',a);
delete(a,i,3);
i:=pos('ora',a);
delete(a,i,2);
write(a);
are ca efect afișarea textului
a) aranjament colorat floral
b) aranjament colt fll
c) aranjament colt flal
d) aranjament colt fl.
Sarcină practică 2:
Ce va afișa programul urmă tor:
var s1:string; s2:string; i:byte;
begin
s1:='invat informatica';
s2:=s1;
i:=pos('INF',s2);
write(i,' ');
i:=pos('inf',s2);
write(i,' ');
delete(s2,i,11);
write(i,' ',length(s2));
end.

a) 0 0 12 15; b) 0 7 7 6; c) 0 7 15 6; d) 12 7 7 6.
Sarcină practică 3:
Completați spațiile punctate, astfel încâ t programul de mai jos să afișeze prefixele
proprii ale unui cuvâ nt citit de la tastatură (de ex., prefixele cuvâ ntului PASCAL
sunt: P, PA, PAS, PASC, PASCA, PASCAL):
var s:string;
i:integer;
Begin
readln(s);
for i:=1 to length(s) do
writeln(_________________________);
end.

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