Sunteți pe pagina 1din 8

Siruri de caractere in Pascal

Siruri de caractere-string D Un sir de caractere reprezinta o succesiune de caractere


cuprinsa intre apostrofuri. Aceasta succesiune poate fi alcatuita din: -litere mici; -litere mari; -cifre; -delimitatori(., ;); -caractere speciale(# @); Un sir de caractere poate fi memorat intr-o variabila de tipSTRING. Declararea unei astfel de variabile se poate realize fie prin specificarea dimensiunii maxime a sirului , fie nu. 1. var nume:string[25]; 2. var nume: string; nume:string[nr]; 1<=nr<=255; Daca la declararea unei variabile este specificata dimensiunea maxima a sirului de caractere , atunci compilatorul va aloca un numar nr de caractere pentru aceasta variabila . Daca dimensiunea nu este specificata atunci compilatorul va aloca dimensiunea maxima , adica 255 de caractere. Unui sir i se poate asocial o valoare prin doua modalitati: a)prin atribuirea directa a unei valori folosind operatorul de atribuire(:=); b)prin procedura (read, readln); !!!Observatie!!!

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:=abcde=>s=abc; b) s:string; s:=abcde=>s=abcde; c) s=-stringul de lungime 0; d) s= -sir de caractere de lungime 1.

Operatii pe 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 precum si compararea a doua siruri de caractere se realizeaza folosind operatorii relationali: =, <, <=, >, >=, <>. Compararea a doua caractere se realizeaza comparand codurile Asci ale celor doua caractere. Compararea a doua siruri de caractere se realizeaza prin compararea lexicografica , reducandu-se la compararea a doua caractere. 3)Parcurgerea unui sir de caractere length(sir)-returneaza lungimea sirului specificat. sir:string; Valoarea returnata de aceasta functie este o valoare de tip byte. length()=0-sirul vid. s:string ; s[i]-caracterul de pe pozitia i;

for i:= 1 to length(s) do <prelucreaza s[i]>; !!!Observatii!!! 1)Relatia de legatura intre caracterele mari si caracterele mici este urmatoarea: CA(mare)+32=CA(mic); CA-codul Asci; 2)ord , chr doua functii predefinite specifice caracterelor; ORD(un character)=codul Asci al caracterului; CHR(un numar)=caracterul corespunzator codului Asci.

Functii predefinite pe stringuri


1)POS(sir1,sir2); 2)COPY(sir,poz,nr); 3)LENGTH(sir); 4)CONCAT(c1,c2,,cn); 1) Functia POS 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. 2) Functia COPY extrage un subsir al sirului specificat, incepand din pozitia poz cu un numar nr de caractere. 3) Functia LENGTH returneaza lungimea unui sir de caractere. 4) Functia CONCAT lipeste mai multe siruri c1,c2,,cn. !!!Observatii!!! 1) Daca poz este mai mare decat length(sir) atunci sirul rezultat va fi sirul vid. 2) Daca nr este mai mare decat length(sir)-poz+1 atunci subsirul obtinut va contine numai length(sir)-poz+1 caractere. |----------|---------------------| 1 poz length(sir) |---------------------|

Length(sir)-poz+1

Proceduri predefinite in stringuri


1)DELETE(sir,poz,nr) Sterge din sir un sir incepand cu pozitia poz un numar nr de caractere. !!!Observatie!!! 1) Daca poz>length(sir) atunci nu se sterge nimic. 2) Daca nr>length(sir)-poz+1 , atunci se vor sterge length(sir)poz+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. 2)INSERT(subsir, sir, poz) Insereaza subsirul dat in sirul sir incepand din pozitia poz. !!!Observatii!!! 1) Daca pozitia este mai mare decat length(sir) , atunci subsirul se insereaza la sfarsitul sirului . subsir=rr; sir=casa; insert(subsir,sir,30)->sir=casarr; insert(subsir,sir,2)->sir=crrasa. 2) Daca lungimea sirului + lungimea subsirului depaseste lungimea de definitie a sirului sir, atunci lungimea sirului se pastreaza la lungimea de definitie (trunk(int)) character de dupa lungime. sir=casa; subsir=rr; sir:string[4]; insert(subsir,sir,2)->sir=crra. 3)STR(numar,sir)

Transforma variabila numar intr-un sir de caractere. 12->12. 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. Val(12.3, numar, eroare)-> eroare=0 ->numar=12.3 Val(12,3,numar,eroare)->eroare=3 ->numar=0.

SET DE PROBLME 1) Sa se afiseze toate prefixele unui cuvant. 2)Sa se afiseze toate sufixele unui cuvant. 3)Sa se elimine toate spatiile dintr-un text. 4)Verificati daca un cuvant este palindrome. 5)Afisati cate vocale contine un text. 6)Se da un text in care cuvintele sunt separate prin spatii .
Sa se afiseze pe cate un rand cuvintele textului. Program problema_1; Var cuv:string; n,i:integer; Begin write(Cuvantul este:); readln(cuv); n:=length(cuv); for i:= 1 to n do writeln(copy(cuv,1,i);

readln; END.

Program problema_2; 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.

Program problema_3; Var cuv:string i,n:integer; Begin write(Cuvantul este:); readln(cuv); n:=length(cuv); for i:= 1 to n do if cuv[i]= then begin delete(cuv,i,1); n:=n-1; end; for i:= 1 to n do write(cuv[i]);

readln; END.

Var cuv:string; i,n:integer; OK:Boolean; Begin write(Cuvantul este:); readln(cuv); n:=length(cuv); OK:= true; for i:= 1 to n div 2 do if cuv[i]<>cuv[n-i+1] then OK:=false; if OK then writeln(Cuvantul este palindrom) else writeln(Cuvantul nu este palindrom); readln; END> 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]) or (text[i] in[a,e,i,o,u]) then inc(nr); writeln(sunt,nr,vocale); readln; Program problema_5;

Program problema_4;

END.

Program problema_6; Var t:string; n,i:integer; cuv:string; Begin Write(Dati textul:); Readln(t); N:=length(t); I:=1; While i<= n do Begin While (t[i] in[ ,,,.,?,!,:,;]) and (i<=n) do Inc(i); Cuv:= ; While not(t[i] in[ ,,,.,?,!,:,;]) and (i<=n) do Begin Cuv:=cuv+t[i]; Inc(i); End; Writeln(cuv); End; Readln; End.