Sunteți pe pagina 1din 17

3. iruri de caractere 3.1. Declararea i memorarea vectorilor de caractere irurile de caractere sunt de fapt succesiuni de caractere.

Am nvat deja s memorm succesiuni de caractere cu ajutorul tablourilor. De exemplu: char cuvant[15]; este un tablou unidimensional (vector), care poate memora 15 elemente de tip char. Acesta poate fi reprezentat n memorie astfel: cuvant 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14

Presupunnd c dorim s citim, s memorm i s afim cuvntul programator, vom scrie urmtorul program: // CUVANT #include <iostream.h> #include <conio.h> void main() {char cuvant[15],i; cout<<"introduceti cuvantul:"; for(i=0;i<11;i++) {cin>>cuvant[i];} cout<<"cuvantul citit:"; for(i=0;i<11;i++) cout<<cuvant[i]; getch(); } Putem reprezenta memorarea variabilei cuvnt astfel: cuvant p r 0 1 o 2 g 3 r 4 a 5 m 6 a 7 t 8 o 9 r 10

11

12

13

14

n realitate n fiecare octet al tabloului se memoreaz codul ASCII al caracterului respective. Octeii haurai ai tabloului reprezint zona de memorie neutilizat. Dup cum observm, din exemplul precedent, o astfel de modalitate de lucru este greoaie i neplcut. Limbajul de programare C++, permite prelucrarea irurilor de caractere ntr-un mod mult mai facil.

3.2. Iniializarea irurilor de caractere Un ir de caractere poate fi iniializat la declarare astfel: char cuvant[ ]=programator; In urma iniializrii, la sfritul cuvntului va fi adugat caracterul 0 (codul ASCII al caracterului nul ). cuvant p r o g r a m a t o r 0 0 1 2 3 4 5 6 7 8 9 10 11 Compilatorul va calcula numrul de octei necesari pentru memorarea cuvntului programator. n acest caz tabloul conine 12 octei, 11 pentru memorarea cuvntului i 1 pentru memorarea codului caracterului nul. char cuvant[ 15]=programator; cuvant p r o g r a m 0 1 2 3 4 5 6

a 7

t 8

o 9

r 10

0 11

12

13

14

n acest caz am memorat un vector de 15 octei, mai muli dect sunt necesari. Ultimii trei octei rmn neutilizai. 3.3. Citirea i afiarea irurilor de caractere Modalitatea de memorare a irurilor, prezentat mai sus (memornd la sfritul irului codul ASCII al caracterului nul), ne permite citirea i afiarea cu mare uurin a irurilor de caractere. De asemenea Limbaul C deine numeroase funcii pentru prelucrarea irurilor de caractere. Funciile cin i cout suport irurile de caractere terminate cu caracterul nul, astfel pot fi citite respectiv afiate irurile de caractere. Exemplul de mai sus poate fi scris mult mai simplu astfel: #include <iostream.h> //CUVANT 1 #include <conio.h> void main() {char cuvant[15]; //citeste un sir de caractere cout<<"introduceti cuvantul:"; cin>>cuvant; //afiseaza sirul de caractere de la primul octet pana la ntalnirea caracterului nul cout<<"cuvantul citit:"; cout<<cuvant; getch(); } n urma introducerii cuvntului programator, n memorie vom avea urmtoarea reprezentare: cuvant p r o g r a m a t o r 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14

Un vector care conine un ir de caractere citit sau iniializat n modul anterior prezentat, poate fi adresat pe componente, n mod normal. De exemplu cuvant[0]=p, cunvant[1]=r, .a.m.d. Din nefericire cu ajutorul funciei cin nu putem citi iruri de cractere care conin spaii sau alte caractere albe. Funcia cin procedeaz astfel la citirea unui ir de caractere: Se sar toate caracterele albe Se citeste irul care ncepe cu primul caracter care nu este alb Citirea se ncheie la ntlnirea primului caracter alb. Exemplu: Pentru irul introdus de la tastatur: invatam despre siruri de caractere, programul de mai sus va afia doar invatam. Pentru citirea irurilor de caractere care conin cuvinte separate prin spaii sau alte caractere albe vom folosi funcia cin.get(). Formatul funciei: cin.get(nume_sir, int nr, char=\n) unde: nume_sir reprezint identificatorul irului de caractere nr - reprezint numrul de caractere care se vor citi mpreun cu caracterul terminal nul. Al treilea parametru desemneaz caracterul la ntlnirea cruia se oprete citirea irului (valoarea lui implicit este \n), prin urmare n cazul n care nu dorim ca citirea sa se termine cu un alt cracter diferit de \n, acest parametru poate s lipseasc. Funcia cin.get citete caractere pna cnd este ndeplinit una din conditiile: fie s-au citit nr-1 caractere fie a ntlnit caracterul specificat de parametrul al treilea. Exemplu: #include <iostream.h> //SIR #include <conio.h> void main() {char sir[50]; cout<<"introduceti cuvantul:"; cin.get(sir,40); //citeste maximum 40 de caractere sau se termina la <enter> cout<<"cuvantul citit:"; cout<<sir; getch(); } n C pot exista mai multe funcii cu acelai nume dar care difer ntre ele prin numrul parametrilor, cu aciuni diferite. (aceast modalitate de utilizare a funciilor poart numele de suprancarcarea funciilor)

Exist nc o implementare a funciei cin.get() far parametri. n acest caz funcia citete un singur caracter alb sau nu. Observaie: n cazul citirii a dou iruri de caractere, n buffer-ul de citire se depune dup citirea primului ir, caracterul \n, datorit faptului c s-a tastat <enter>. Citirea celui de-al doilea ir se oprete pentru c se preia \n.din buffer. Apelnd funcia cin.get() aceasta va prelua caracterul \n, eliminm acest inconvenient, iar al doilea ir se va citi n mod normal. #include <iostream.h> #include <conio.h> void main() {char sir1[50],sir2[50]; cout<<"introduceti sir1:"; cin.get(sir1,40); cout<<"cuvantul citit:"; cout<<sir1<<endl; cin.get(); cout<<"introduceti sir2:"; cin.get(sir2,40); cout<<"cuvantul citit:"; cout<<sir2; getch(); } //SIR

//citeste caracterul \n de la sfarsitul sirului sir1

3.4. Tipul char* Tipul de dat char* poart numele de pointer la caracter. O variabil de tip pointer la caracter, este capabil s rein adresa de memorie a unui caracter. Trebuie s spunem n acest moment faptul c numele unei variabile de tip ir de caractere (sau vector n general), reprezint adresa de memorie a primului octet al irului (vectorului). Datorit acestui fapt, elementele unui ir de caractere pot fi accesate prin intermediul adreselor lor, astfel: Presupunem c am declarat i iniializat o variabil de tip ir de caractere: char sir[]=programator; s vedem ce va afia funcia cout<<sir; evident va afiasirul: programator, prin urmare am adresat irul de la primul octet. dac scriem sir+1, vom adresa irul de la al doilea octet cout<<sir+1; va afia :rogramator deoarece la adresa irului am adunat 1 i am obinut adresa urmtorului octet, adica octelul al doilea din ir. cout<<sir+2;

va afia :ogramator i aa mai departe, ntruct la adresa irului am adunat 2 i am obinut adresa celui de-al treilea octet din ir. Expresiile de forma: sir, sir+1, sir+2 sunt de tip char*, adrese de memorie ale unor elemente de tip caracter. Exemplu: #include <iostream.h> //ADRESE #include <fstream.h> void main() {char sir[15],*p; //p-pointer la o variabila de tip caracter ofstream f("sir.out"); cout<<"introduceti sir:"; cin>>sir; f<<"sir:"<<sir<<endl; f<<"sir+1:"<<(sir+1)<<endl; f<<"sir+2:"<<(sir+2)<<endl; f<<"sir+3:"<<(sir+3)<<endl; f<<"(sir)[0]:"<<(sir)[0]<<endl; f<<"(sir+1)[0]:"<<(sir+1)[0]<<endl; f<<"(sir+1)[1]:"<<(sir+1)[1]<<endl; f<<"(sir+1)[2]:"<<(sir+1)[2]<<endl; f<<"(sir+2)[0]:"<<(sir+2)[0]<<endl; f<<"(sir+2)[1]:"<<(sir+2)[1]<<endl;; p=sir+3; //se depune adresa celui de al patrulea element in pointerul p (sir+3) f<<"sir+3="<<p<<endl; p++; f<<"sir+3="<<p<<endl; f.close(); } Introducnd irul abcdefgijk, n exemplul de mai sus, n fiierul sir.out se va afia: sir:abcdefghijk sir+1:bcdefghijk sir+2:cdefghijk sir+3:defghijk (sir)[0]:a (sir+1)[0]:b (sir+1)[1]:c (sir+1)[2]:d (sir+2)[0]:c (sir+2)[1]:d sir+3=defghijk sir+3=efghijk sir a 0 b 1 c 2 d 3 e 4 f 5 g 6 h 7 i 8 j 9 k 10 0 11

12

13

14

3.5. Funcii care opereaz cu iruri de caractere irurile de caractere fiind n realitate tablouri unidimensionale nu sunt permise atribuiri de forma sir1=sir2 i comparri ntre sir1 i sir2. Pentru efectuarea acestora i a altor operaii sunt implementate funcii care lucreaz cu iruri de caractere. Pentru ca aceste funcii s poat fi folosite, trebuie inclus heder-ul string.h. 3.5.1. Determinarea lungimii unui ir de caractere: size_t strlen(const char *s); unde: size_t const char *s tip ntreg fr semn (al funciei) - argumentul este de tip char* i identific un ir de caractere.

Exemplu: Se citete un ir de caractere, s se afieze lungimea irului citit. #include <conio.h> #include <iostream.h> #include <string.h> //LUNGIME

void main() {char sir[50]; cout<<"introduceti sir:"; cin>>sir; cout<<strlen(sir); //determina si afiseaza lungimea sirului getch(); } 3.5.2. Copierea unui ir ntr-un alt ir. char *strcpy(char *dest, const char *sursa); unde: char *dest - argumentul identific irul destinaie const char *sursa - argumentul identific sirul surs Descriere: Copiaz irul sursa n irul dest, copierea se termin dup ce a fost copiat caracteru nul. Valoare returnat: Funcia strcpy returneaz adresa irului dest (destinaie) Exemplu: Se citete un ir de caractere, se copieze ntr-un alt ir. #include <iostream.h> //COPIERE #include <iostream.h> #include <string.h> void main() {char sir1[50],sir2[50]; cout<<"introduceti sir1:"; cin>>sir1; strcpy(sir2,sir1); cout<<sir2; //copiaza sir1 in sir2 } 6

3.5.3. Concatenarea a dou iruri a.) Funcia strcat char *strcat(char *dest, const char *sursa); Descriere: Funcia strcat adaug la sfritul irului dest, o copie a sirului sursa. Lungimea sirului rezultat va fi strlen(dest) + strlen(sursa). Valoare returnat: Funcia strcat returneaz adresa irului dest. Exemplu: Se citesc dou iruri de caractere. S se concateneze la primul ir, la al doilea ir citit. #include <iostream.h> //CONCATENARE 1 #include <string.h> #include <conio.h> void main() {char sir1[50],sir2[50]; cout<<"introduceti sir1:"; cin>>sir1; cout<<"introduceti sir2:"; cin>>sir2; strcat(sir1,sir2); //concateneaza sir2 la sir1 cout<<sir1; getch(); } b.) Funcia strncat char *strncat(char *dest, const char *sursa, size_t maxlen); Descriere Copiaz din irul sursa cel mult maxlen caractere la sfritul irului dest. irul dest va avea lungimea strlen(dest) + maxlen. Valoare returnat Funcia strncat returneaz adresa irului dest. Exemplu: Se citesc dou iruri de caractere, s se concateneze primele 3 caractere din irul al doilea la primul ir citit. #include <iostream.h> //CONCATENARE 2 #include <string.h> #include <conio.h> void main() {char sir1[50],sir2[50]; cout<<"introduceti sir1:"; cin>>sir1; cout<<"introduceti sir2:"; cin>>sir2; strncat(sir1,sir2,3); //concateneaza 3 caractere din sir2 la sir1 cout<<sir1; getch(); } 7

3.5.4. Cutarea ntr-un ir a.) Funcia strchr char *strchr(const char *s, int c); Descriere Caut prima apariie a caracterului c n irul s. Cutarea se face de la stnga la dreapta. Caracterul nul este considerat ca fcnd parte din ir. Valoare returnat Funcia strchr returneaz adresa primei apariii a caracterului c n ir sau o expresie de tip char* cu valoarea 0 (null). Exemplu: Se citete un ir de caractere i un caracter. Cutm caracterul citit n ir, n cazul n care l gsim afim poziia n ir unde se gsete acest caracter, n cazul n care caracterul nu se gsete n ir vom afia un mesaj.

#include <iostream.h> //CAUTARE CARACTER #include <string.h> #include <conio.h> void main() {char sir[50],*p,c; cout<<"introduceti sir:"; cin>>sir; cout<<"introduceti caracterul cautat:"; cin>>c; p=strchr(sir,c); //cauta caracterul c in sir if(p) cout<<c<<" se gaseste pe pozitia "<<(p-sir)<<" in sir"; //afiseaza pozitia din sir else cout<<c<<" nu se gaseste in sir"; getch(); }

Observaie: Am determinat poziia caracterului gsit n ir scznd din adresa acestuia, adresa de nceput a irului (p-sir). Astfel am obinut numrul de elemente cuprinse ntre cele dou adrese. b.) Funcia strrchr char *strrchr(const char *s, int c); Are acelai rol ca i funcia strchr, dar cutarea caracterului c se face de la dreapta la stnga.

c.) Funcia strstr char *strstr(const char *s1, const char *s2); Descriere Caut prima apariie a subirului s2 n cadrul irului s1. Cutarea se face de la stnga la dreapta. Valoarea returnat Funcia returneaz adresa elementului din s1, unde ncepe subirul s2. Dac s2 nu apare n irul s1, returneaz o expresie de tip char* cu valoarea 0 (null). Exemplu: Se citesc dou iruri de caractere ir1 i ir2. Dac ir2 este subir al lui ir1 se va afia poziia n ir1 unde se gasete. n caz contrar se afieaz un mesaj. #include <iostream.h> #include <string.h> #include <conio.h> //CAUTARE SIR

void main() {char sir1[50],sir2[50],*p; cout<<"introduceti sir1:"; cin>>sir1; cout<<"introduceti sir2:"; cin>>sir2; p=strstr(sir1,sir2); if(p) cout<<sir2<<" se gaseste pe pozitia "<<(p-sir1)<<" in sir"; else cout<<sir2<<" nu se gaseste in sir1"; getch(); } 3.5.5. Compararea a dou iruri int strcmp(const char *s1, const char *s2); Descriere Funcia strcmp compar irul s1 cu irul s2. Compararea ncepe cu primul caracter din fiecare ir i continu secvenial, pn cnd cele dou caractere comparate sunt diferite sau pn cnd unul dintre iruri se termin. Se compar codurile ASCII ale caracterelor, astfel, un caracter este mai mic dect altul, dac are codul ASCII mai mic. Se consider mai mic irul care conine caracterul mai mic. Dac cele dou iruri pe percursul comparrii au toate caracterele egale, dar unul dintre ele se termin, se consider mai mic irul care se terminat (are mai puina caractere). Valoarea returnat Returneaz o valoare < 0, dac s1<s2 Returneaz o valoare =0, dac s1=s2 Returneaz o valoare >0, dac s1>s2

Exemplu:Se citesc dou cuvinte. S se afieze cuvintele n ordine lexicorafic. Se va afia un mesaj n cazul n care cele dou cuvinte sunt egale.

#include <iostream.h> //COMPARARE SIRURI #include <string.h> #include <conio.h> void main() {char sir1[50],sir2[50]; int k; cout<<"introduceti sir1:"; cin>>sir1; cout<<"introduceti sir2:"; cin>>sir2; k=strcmp(sir1,sir2); //compar cele dou siruri if(k<0) cout<<sir1<<" "<<sir2; else if(k>0) cout<<sir2<<" "<<sir1; else cout<<"sirurile sunt egale"; getch(); }

3.5.6. Separarea entitilor char *strtok(char *s1, const char *s2); Descriere Caut n s1, un ir care este separat de delimitatori definii n sirul s2. S numim irul cu aceast proprietate entitate. Prima apelare a funciei strtok caut de la nceputul irului i returneaz adresa primului caracter al entitii determinate, apoi insereaz caracterul 0 (null) la sfritul acestei entiti Urmatoarea cutare trebuie s nceap de la caracterul nul inserat. Valoarea returnt Funcia returneaz adresa entitite determinate n s1 sau o expresie de tip char* cu valoarea 0 (null) dac nu gsete nici o entitate. Exemplu: Se citete un text care contine cuvinte separate prin spaii, virgule sau punct. S se afieze cuvintele cte unul pe o linie i s se numere cuvintele din text.

10

#include <iostream.h> //NUMAR CUVINTE #include <conio.h> #include <string.h> char text[101],*p,separator[]=" ,."; int k=0; void main() { clrscr(); cout<<"Introduceti textul:"; cin.get(text,100); cout<<"\n"; p=strtok(text,separator); //determina prima entitate while(p) {k++; cout<<p<<"\n"; p=strtok(NULL,separator); //determin urmtoarele entiti } cout<<"\nNumarul de cuvinte:"<<k; getch(); }

3.5.7. Funcii de conversie a.) Conversia unui ntreg n sir de caractere char *itoa(int valoare, char *s, int baza); valoare valoarea de convertit s -variabila sir care va conine irul obinut baza -specifica baza utilizat n conversie (trebuie s fie ntre 2 i 36 inclusiv). In cazul n care valoarea este negativa i baza este 10, primul caracter al irului va fi (-). Descriere Pentru utilizarea funciei trebuie inclus heder-ul stdlib.h. Convertete un ntreg ntr-un ir de caractere. irul obinut prin conversie va conine caracterul 0 pe ultima poziie. Lungimea irului returnat poate fi cel mult 17 bytes. Valoarea returnat Funcia returneaz adresa irului obinut. Exemplu:S se converteasc un numr ntreg ntr-un ir de caractere, folosind baza 2.

11

#include <iostream.h> //ITOA #include <conio.h> #include <string.h> #include <stdlib.h> void main() {int k,baza; char s[17]; cout<<"numar:";cin>>k; cout<<"baza:";cin>>baza; itoa(k,s,baza); cout<<"sirul:"<<s; getch(); }

//converteste numarul in sir

Alte funcii de conversie similare: Funcia ltoa convertete o valoare de tip long int ntr-un ir de caractere. char *ltoa(int valoare, char *s, int baza); Funcia ultoa convertete o valoare de tip unsigned longt ntr-un ir de caractere. char *ltoa(int valoare, char *s, int baza); b.) Conversia unui ir de caractere ntr-un ntreg long strtol(const char *s, char **adresa, int baza); s adresa baza -sirul se convertit -adresa unei variabile de tip char*, rwine adresa caracterului din ir care nu poate fi convertit. -baza n care este considerat numrul sub form de ir. Poate avea valorile 8, 10 sau 16.

Descriere Pentru utilizarea funciei trebuie inclus heder-ul stdlib.h. Funcia strtol convertete ir de caractere ntr-o valoare de tip long. Valoarea returnat Funcia returneaz adresa irului obinut. Exemplu:S se converteasc un ir de caractere coninnd un numr n baza 10 n numr. n cazul n care nu poate fi convertit s se afieze de unde nu poate fi

12

convertit. #include <iostream.h> //STRTOL #include <conio.h> #include <string.h> #include <stdlib.h> void main() {int baza; long k; char s[17],*p=NULL; cout<<"sir:";cin>>s; cout<<"baza(8,10,16):";cin>>baza; k=strtol(s,&p,baza); //face conversia cout<<"valoarea numerica:"<<k<<endl; cout<<"nu s-a putut converti de la:"<<p; //afiseaza de unde nu poate fi convertit getch(); } Alte funcii de conversie similare: Funcia strtod convertete ir de caractere ntr-o valoare de tip double. double strtod(const char *s, char **adresa, int baza); Funcia strtold convertete ir de caractere ntr-o valoare de tip long double. long double strtold(const char *s, char **adresa, int baza); Funcia strtoul convertete ir de caractere ntr-o valoare de tip unsigned long. unsigned long strtol(const char *s, char **adresa, int baza);

13

3.6. Probleme rezolvate 1. Se citesc de la tastatur dou iruri s1 i s2. S se elimine toate apariiile lui s2 n s1. irul s2 conine doar un cuvnt. #include <conio.h> #include <iostream.h> #include <string.h> //STERGE

void main() {char s1[100],s2[30],*p; int l; cout<<"introduceti textul:";cin.get(s1,100); cout<<"introduceti cuvantul:";cin>>s2; l=strlen(s2); //determina lungimea sirului s2 p=strstr(s1,s2); //cauta s2 in s1 while(p) {strcpy(p,p+l); //sterge sirul s2, copiind sirul de pa pozitia p+l pe pozitia p p=strstr(s1,s2); //cauta o noua aparitie a lui s2 in s1 } cout<<s1; getch(); }

2. Se citete un ir s i dou cuvinte c1 i c2. S se nlocuiasc toate apariiile lui c1 n s cu c2. #include <conio.h> //INLOCUIRE #include <iostream.h> #include <string.h> void main() {char s[100],ss[100]="",c1[30],c2[30],*p; //ss sir vid int l; cout<<"introduceti textul:";cin.get(s,100); cout<<"introduceti primul cuvantul:";cin>>c1; cout<<"introduceti al doilea cuvantul:";cin>>c2; l=strlen(c1); //determina lungimea lui c1 p=strstr(s,c1); //determina prima aparitie a lui c1 in s while(p) {strncat(ss,s,p-s); //concateneaza p-s caractere la sirul ss strcat(ss,c2); //concateneaza c2 la ss strcat(ss,p+l); //concateneaza sirul de dupa aparitia lui c1 la ss strcpy(s,ss); //copiaza ss in s strcpy(ss,""); //anuleaza sirul ss p=strstr(s,c1); //cauta urmatoarea aparitie a lui c1 in s } cout<<s; getch(); } 14

3.Se citete de la tastatur un text care conine cuvinte separate prin spaiu, virgul sau punct. S se afieze cuvintele textului n ordine alfabetic. Vom separa cuvintele textului folosind funcia strtok i le vom memora rnd pe rnd ntr-un tablou. Vom ordona tabloul. #include<iostream.h> //ORDONARE CUVINTE #include<conio.h> #include<string.h> char s[100],*p,a[20][20],separator[]=" ,.";//a-tablou de siruri,retine cuvintele int k=0,i; void separare(); void afisare(); void ordonare(); void main() { cout<<"Dati sirul:"<<endl;cin.get();cin.get(s,100,'\n'); separare(); cout<<"cuvintele:"<<endl; afisare(); ordonare(); cout<<"cuvintele ordonate:"<<endl; afisare(); getch(); } void separare() //separa cuvintele { p=strtok(s,separator); while (p) { strcpy(a[k],p); k++; p=strtok(NULL,separator); } } void afisare() //afiseaza cuvintele { int i; for(i=0;i<k;i++) cout<<a[i]<<endl; } void ordonare() //ordoneaza cuvintele {int sw,i; char aux[20]; do {sw=1; for(i=0;i<k-1;i++) if (strcmp(a[i],a[i+1])>0) { strcpy(aux,a[i]); strcpy(a[i],a[i+1]); strcpy(a[i+1],aux); sw=0; } } while(!sw); } 15

3.7. Evaluare TESTUL 1 1. Descriei modul de funcionare al comenzii strcmp. 2. Dac sir1=calculator iar sir2=peformant. Spunei ce va conine sir1 dupa aplicarea funciei: Strncat(sir1,sir2,6) 3. Se citeste un text de la tastatur. S se afiseze histograma vocalelor din text. 4. Se citesc de la tastatur n numere naturale <=10. S se converteasc fiecare numr ntr-un sir de caractere care reprezint numrul n baza b (2<=b<=10). TESTUL 2 1. Descriei modul de funcionare al comenzilor: strchr, strstr. 2. Spunei care este efectul programului de mai jos: void main() { char sir1[ ]="calculator", sir2[ ]="performant"; strcpy(sir1+5," "); strcat(sir1,sir2); cout<<sir1; getch(); } 3. Se citesc de la tastatur numele colegilor de clas. S se afiseze n ordine alfabetic numele citite. TESTUL 3 1. Descriei modul de funcionare al comenzilor: char *ltoa(int valoare, char *s, int baza); long strtol(const char *s, char **adresa, int baza); 2. Spunei care este efectul programului de mai jos: void main() { char sir1[]="calculator", sir2[]="performant"; strcpy(sir1+3,sir2+6); cout<<sir1; getch(); } 3. Se citete un text. S se afieze cuvintele din text care contin cel puin 3 vocale.

16

3.8. Probleme propuse 1. Sciei o funcie care insereaz pe poziia p a unui ir un alt sir dat. 2. Scriei o funcie care terge dintr-un ir dat n caractere, ncepnd cu poziia p. 3. Fiind dat un cuvnt, s se afieze toate sufixele sale. 4. Fiind dat un cuvnt, s se afieze toate prefixele sale. 5. Se citeste un text de la tastatur, s se afiseze cuvintele n ordinea cresctoare a lungimii lor. 6. Se citete un text de la tastatur, care conine cuvinte separate prin spaii. S se elimine spaiile din text. 7. Se citesc cuvinte pn la introducerea cuvantului END. Afiai cuvintele n ordinea invers citirii lor. 8. Numrai pariiile unui cuvnt ntr-un text. 9. Numrai apariiile fiecrei litere ntr-un text, fr a face distincie ntre literele mari i mici. 10. Se citeste de la tastatur un text care conine mai multe propoziii. Cuvintele textului sunt separate prin : spatiu, virgul sau punct. S se numere cte propoziii conine textul, iar fiecare propoziie, cte cuvinte are. 11. se citete un cuvnt de la tastatur. S se ghiceasc cuvntul prin ncercri repetate. Fiecare tentativ va fi urmat de afisarea literelor ce se corespund. 12. Cutai un cuvnt ntr-un text i afiai numrul de apariii ale cuvntului. Dac acest cuvnt este inclus n alte cuvinte din text, nuu se va numra.

17