Sunteți pe pagina 1din 17

NOIUNI TEORETICE I

PROBLEME
IRURI DE CARACTERE C++
Clasa a XI a, specializarea matematic - informatic

Prof. opa Robert


Noiuni teoretice prezentare general
Un ir de caractere este o structur de date care este format dintr-o mulime ordonat de
caractere, n care fiecare caracter se identific prin poziia sa n cadrul mulimii. Un ir de caractere
este, de fapt, o succesiune de caractere. n limbajul C++ irurile de caractere pot fi implementate ca
vectori de caractere. Dup cum tii, n general, vectorii au dou lungimi: o lungime fizic i o lungime
logic, ceea ce se aplic i vectorilor de caractere. Ceea ce deosebete un vector de caractere de alte
tipuri de vectori este posibilitatea de a marca sfritul logic al vectorului prin folosirea caracterului NULL
(care are codul ASCII 0).
Declararea irurilor de caractere
O constant de tip ir de caractere se declar ntre doua caractere . n memoria intern, o
constant de acest tip este reinut sub forma unui vector de caractere. Fiecare component a irului
(ncepnd cu cea de indice 0) reine codul ASCII al caracterului pe care l memoreaz. Caracterul nul
este memorat automat. Trebuie rezervate lungimea irului+1 caractere char (+1 pentru caracterul nul).
Exemple
char s[6] = {a, b, c, d, e};
char sir[5] = {a, b, c, d, \0};
char s[5] = abcd;
char s[ ] = bac2015;
char sir1[15] = abracadabra;
char s[10];

Citirea i afiarea irurilor de caractere


Fie urmtoarea declaraie:
char s[256]; - s-a declarat un ir de caractere cu numele s ce poate memora maximum 255 de
caractere.
Citirea sirului s se poate face utiliznd operatorul uzual de citire >> :
cin>>s;
n acest caz se vor citi n irul s toate caracterele pn la primul caracter alb (spaiu, tab, enter). De
exemplu, dac fluxul de intrare conine caracterele Buna ziua, dup citire, sirul s va fi Buna. Pentru
a elimina acest dezavantaj se pot folosi funciile get( ) sau getline( ) (diferena ntre ele este c getline()
extrage din fluxul de intrare caracterul delimitator, n timp ce get() nu l extrage). Dac totui dorii s
folosii numai funcia get, atunci dup citirea fiecrui ir trebuie s scriei funcia cin.get() fr parametri.
Sintaxa:
cin.get(nume_sir,lungimea_sirului);
cin.getline(nume_sir,lungimea_sirului,delimitator); - unde delimitatorul este optional (implicit este
caracterul ' \ n.
Exemple
#include <iostream>
using namespace std;
int main()
{
//declararea unor siruri
char s[256],vocale[]="aeiou",sir[12]="bacalaureat",s1[50],s2[35];
cout<<"Introduceti primul sir:";
//citirea primului sir
cin.get(s,255);
//afisarea primului sir citit
cout<<s<<endl;
cin.get();//fara aceasta instructiune nu se poate citi urmatorul sir
cout<<"Introduceti al doilea sir:";
cin.getline(s1,49);
cout<<s1<<endl;
cout<<"Introduceti al treilea sir:";
cin.get(s2,34);
cout<<s2;
}
Afiarea unui ir de caractere n limbajul C++ se face cu ajutorul operatorului de scriere <<, cum
se observ i n exemplul de mai sus, caracterele fiind afiate pn la ntlnirea marcajului de sfrit
de ir (NULL).
cout<<s;
irurile de caractere pot fi prelucrate la nivel de caracter (pot fi parcurse caracter cu caracter, ca un
vector de caractere), sau pot fi prelucrate la nivel de structur (cu ajutorul funciilor existente n
bibliotecile limbajului, cstring sau string.h).
Variabilele de tip pointer i irurile de caractere
irurile de caractere pot fi manipulate prin intermediul unei variabile de tip pointer ctre tipul char.
Pointerul este o variabil de memorie n care se memoreaz o adres de memorie.
Declararea unui pointer
char *sir=albacazapada;
Exemplu:
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char s[60]="informatica",*sir,*p;
sir=s;
cout<<sir<<endl;//se afiseaza informatica
p=s+2;
cout<<p<<endl;//se afiseaza formatica
p=strchr(sir,'m');
cout<<p;//se afiseaza matica
}

Funcii pentru prelucrarea irurilor de caractere


Funcia strlen - strlen(nume_sir); returneaz lungimea efectiv a unui ir (fr a numra
terminatorul de ir).
Exemplu: char a[50]=ora de informatica;
cout<<strlen(a);//se afieaz 18
Funcia strcpy
strcpy(sir_destinatie,sir_sursa); copiaz irul sir_ sursa n sir_destinatie (se simuleaz atribuirea
a=b).
Exemplu:
char a[50]=primul sir,b[40]=al doilea sir;
a=b; //eroare
strcpy(a,b); a = al doilea sir; b=al doilea sir;
Funcia strcat strcat(dest,sursa); adaug irului dest irul sursa. irul sursa rmne nemodificat.
Operaia se numete concatenare i nu este comutativ.
Exemplu: char *a=vine ,*b=vacanta?; strcat(a,b); a = vine vacanta?;
Funcia strncat
strncat(dest,sursa,nr); adaug la dest primele nr caractere din irul sursa. irul sursa rmne
nemodificat.
Exemplu:
char *a=vine,*b=varanul?; strncat(a,b,4); a = vine vara;
Funcia strchr
strchr(sir,c); are rolul de a cuta caracterul c n irul sir. Cutarea se face de la stnga la dreapta, iar
funcia ntoarce adresa subirului care ncepe cu prima apariie a caracterului c. Dac nu este gsit
caracterul, funcia returneaz 0. Diferena dintre adresa irului iniial i cea a subirului returnat
reprezint chiar poziia caracterului cutat n irul dat.
Exemplu:
char *a=acesta este un sir,b=t,c=x,d;
cout<<strchr(a,b);//se tiprete ta este un sir;
cout<<strchr(a,c);//nu se tiprete nimic
d= strchr(a,b); cout<<Caracterul apare prima data la poziia <<d-a;

Ex: S se afieze toate poziiile unui caracter ntr-un ir.


#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char a[100],*p,c;
cin.get(a,100);
cin>>c;
p=strchr(a,c);
while (p)
{
cout<<"Pozitia "<<p-a<<endl;
p++;
p=strchr(p,c);
}
}

Funcia strrchr strrchr(sir,c); are acelai rol cu strchr, cu deosebirea c returneaz adresa ultimei
apariii a caracterului (cutarea se face de la dreapta spre stnga)

Funcia strcmp strcmp(sir1,sir2); are rolul de a compara dou iruri de caractere. Valoarea
returnat este -1 (dac sir1<sir2), 0 (dac sir1=sir2) i 1 (dac sir1>sir2).
Obs: Funcia strcmp returneaz diferena dintre codurile ASCII ale primelor caractere care nu coincid.

Funcia stricmp stricmp(sir1,sir2); are acelai rol cu strcmp, cu deosebirea c nu face distincie
ntre literele mari i cele mici ale alfabetului.

Funcia strstr strstr(sir1,sir2); are rolul de a identifica dac irul sir2 este subir al irului sir1. Dac
este, funcia returneaz adresa de nceput a subirului sir2 n irul sir1, altfel returneaz adresa 0. n
cazul n care sir2 apare de mai multe ori n sir1, se returneaz adresa de nceput a primei apariii.
Cutarea se face de la stnga la dreapta.

Funcia strtok strtok(sir1,sir2); are rolul de a separa irul sir1 n mai multe iruri (cuvinte) separate
ntre ele prin unul sau mai multe caractere cu rol de separator. irul sir2 este alctuit din unul sau mai
multe caractere cu rol de separator. Funcia strtok acioneaz n felul urmtor:
Primul apel trebuie s fie de forma strtok(sir1,sir2); funcia ntoarce adresa primului caracter al
primei entiti. Dup prima entitate, separatorul este nlocuit automat cu caracterul nul.
Urmtoarele apeluri sunt de forma strtok(NULL,sir2); de fiecare dat, funcia ntoarce adresa
de nceput a urmtoarei entiti, adugnd automat dup ea caracterul nul.
Cnd irul nu mai conine entiti, funcia returneaz adresa nul.
Exemplu:
S se separe cuvintele dintr-un text.
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char text[100],*p,separator[]=",. !?";
int nr=0;
cout<<"Dati sirul:";
cin.get(text,100);
p=strtok(text,separator);
while (p)
{
cout<<p<<endl;
nr++;
p=strtok(NULL,separator);
}
cout<<"Textul are "<<nr<<" cuvinte.";
}

Funcia strlwr cu forma general strlwr(sir); are rolul de a converti toate literele mari din sir n litere
mici. Restul caracterelor rmn neschimbate.

Funcia strupr cu forma general strupr(sir); are rolul de a converti toate literele mici din sir n litere
mari. Restul caracterelor rmn neschimbate.

Funcia tolower(ch) - transform caracterul ch din liter mare n liter mic, altfel l las neschimbat.

Funcia toupper(ch) - transform caracterul ch din liter mic n liter mare, altfel l las neschimbat.

Funcia strrev(sir) inverseaz coninutul unui ir de caractere.

Funcia isalnum(ch); - testeaz dac un caracter este liter sau cifr.

Funcia isalpha(ch); - testeaz dac un caracter este liter.

Funcia isdigit(ch); - testeaz dac un caracter este cifr.

Funcia islower(ch); - testeaz dac un caracter este liter mic.

Funcia isupper(ch); - testeaz dac un caracter este liter mare.

Exemplul nr.1:
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char sir[40]="Azi Am Luat 10 La Informatica?";
int i;
for(i=0;i<strlen(sir);i++)
{
if(isalnum(sir[i])==0)
cout<<sir[i];//se afiseaza spatiile si semnul intrebarii
}
}
Exemplul nr.2:
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char sir[40]="Azi Am Luat 10 La Informatica?";
int i;
for(i=0;i<strlen(sir);i++)
{
if(isalpha(sir[i])==0)
cout<<sir[i];//se afiseaza spatiile,cifrele si semnul intrebarii
}
}

Exemplul nr.3:
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char sir[40]="Azi Am Luat 10 La Informatica?";
int i;
for(i=0;i<strlen(sir);i++)
{
if(isdigit(sir[i]))
cout<<sir[i];//se afiseaza cifrele
//sau
//if(sir[i]>='0' && sir[i]<='9')
//cout<<sir[i];

}
}

Exemplul nr.4:
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char sir[40]="Azi Am Luat 10 La Informatica?";
int i;
for(i=0;i<strlen(sir);i++)
{
if(islower(sir[i]))
cout<<sir[i];//se afiseaza numai literele mici
//sau
//if(sir[i]>='a' && sir[i]<='z')
//cout<<sir[i];
}
cout<<endl;
for(i=0;i<strlen(sir);i++)
{
if(isupper(sir[i]))
cout<<sir[i];//se afiseaza numai literele mari
//sau
//if(sir[i]>='A' && sir[i]<='Z')
//cout<<sir[i];
}
}
Probleme iruri de caractere
1. Ce se va afia n urma executrii secvenei de mai jos:
char s[10]="primavara";
int i;
for(i=1;i<=3;i++)
strcpy(s+1,s+2);
cout<<s;

2. Ce se va afia n urma executrii secvenei de mai jos:


char x[]="Mama",y[]="Macara";
if(strcmp(x,y)>0)
cout<<x;
else
if(strcmp(x,y)==0)
cout<<"Incorect";
else
cout<<y;

3. Ce se va afia la finalul executrii urmtoarei secvene de instruciuni?


char x[]="albacazapada",*p;
x[0]=x[0]-32;
p=strchr(x,'a');
cout<<x[0]<<p[0]<<x[strlen(x)-1];

4. Fie urmtorul program:


#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char s[10],x;
int i;
strcpy(s,"clasa");
for(i=0;i<strlen(s)-1;i++)
{
if(s[i]>s[i+1])
{
x=s[i];
s[i]=s[i+1];
s[i+1]=x;
}
cout<<s<<" ";
}
}
Ce se va afia pe ecran n urma execuiei acestui program?

5. Se citete un ir de caractere. S se contorizeze vocalele, spaiile i consoanele.

6. Se citesc dou cuvinte. S se afieze mesajul DA sau NU, dac cele dou cuvinte rimeaz.

7. Se citete un ir format numai din litere i spaii. S se afieze irul, dup ce vocalele au fost
terse.

8. Se citete o fraz. Se cere s se afieze numrul cuvintelor, cel mai lung i cel mai scurt cuvnt.
9. Se citete un text cu cel mult 255 de caractere. Scriei un program care s modifice textul citit
astfel:
a) Transformai toate literele n majuscule;
b) Transformai toate literele n minuscule;
c) Transformai toate literele mari n litere mici i literele mici n litere mari;
d) Transformai fiecare cuvnt text astfel nct s fie scris cu prima liter mare;
e) Transformai fiecare cuvnt text astfel nct s fie scris cu prima i ultima liter mare.

10. S se verifice dac o fraz este de tip palindrom.(Au o nava noua. Ele fac cafele. Icre, pui,
ciuperci. Sa nu iei un as.)

11. Se citete un text de cel mult 255 caractere i o liter c. tergei din textul citit toate apariiile
literei c. Exemplu: abcd i c=b se obine irul acd.

12. Se citete un text de cel mult 255 caractere. nlocuii toate vocalele din text cu *. Exemplu:
abedi se obine irul *b*d*.

13. Se citete un text de cel mult 255 caractere i dou litere c1 i c2. nlocuii n textul citit toate
apariiile literei c1 cu litera c2. Exemplu: abada , c1=a i c2=e se obine irul ebede .

14. Se citete un text de cel mult 255 caractere i dou litere c1 i c2. Inversai n textul citit toate
apariiile literei c1 cu litera c2. Exemplu: abada , c1=a i c2=b se obine irul babdb.

15. Scriei un program care citete de la tastatur un cuvnt format din cel mult 20 de caractere, doar
litere ale alfabetului englez (cel puin o majuscul i cel puin o liter mic). Programul determin
transformarea cuvntului citit prin eliminarea fiecrei litere mici a cuvntului, restul literelor
nemodificndu-se, ca n exemplu. Programul afieaz pe ecran cuvntul obinut.
Exemplu :
Date de intrare XilologIC
Date de ieire XIC

16. Scriei un program care citete de la tastatur dou iruri de caractere, fiecare ir fiind format
din cel mult 100 de litere mici din alfabetul englez, i care afieaz mesajul "DA" dac toate
literele din primul ir se gsesc n cel de-al doilea ir, nu neaprat n aceeai ordine i de
acelai numr de ori, sau mesajul "NU" n caz contrar. De exemplu, dac primul ir este
"baraca", iar cel de-al doilea ir este "abracadabra", programul trebuie s afieze mesajul
"DA" deoarece literele primului ir apar n cel de-al doilea.

17. Scriei un program care citete de la tastatur un ir de caractere format din cel mult 20 de litere
mici din alfabetul englez i care afieaz mesajul "DA" dac irul este format dintr-un numr egal
de consoane i vocale (a,e,i,o,u), respectiv mesajul "NU" n caz contrar.

18. Scriei programul C++ care citete de la tastatur un ir s de cel mult 30 de litere i o liter
c;programul determin dublarea fiecrei apariii a literei c n s i scrie noul ir obinut n fiierul
text BAC.TXT. De exemplu, dac se citete irul alfabetar i caracterul a atunci fiierul BAC.TXT
va conine irul: aalfaabetaar.

19. Scriei programul C++ care citete de la tastatur un ir de cel mult 30 de litere ale alfabetului
englez i creeaz fiierul text BAC.TXT ce conine irul de caractere dat i toate prefixele acestuia
de lungime cel puin 1, fiecare pe cte o linie, n ordinea descresctoare a lungimii prefixelor. De
exemplu, dac se citete irul: proba, atunci BAC.TXT va conine:
proba
prob
pro
pr
p
20. Scriei un program C++ care citete de la tastatur un cuvnt format din cel mult 20 de caractere,
doar litere ale alfabetului englez. Programul determin transformarea cuvntului citit prin
nlocuirea fiecrei litere mici a cuvntului cu litera mare corespunztoare, restul literelor
nemodificndu-se, ca n exemplu. Programul afieaz pe ecran cuvntul obinut.
Exemplu: pentru cuvntul bACAlaUrEaT se va afia pe ecran: BACALAUREAT.

21. Se citete un text de cel mult 255 de caractere, format din mai multe cuvinte separate prin spaii.
Afiai lungimea maxim a unui cuvnt din text i toate cuvintele de lungime maxim.

22. Se citete un text de cel mult 255 de caractere, format din mai multe cuvinte separate prin spaii.
Afiai cuvintele din text aranjate n ordine alfabetic.

23. Se citesc dou cuvinte de la tastatur. S se scrie un program C++ care s verifice dac cele
dou cuvinte se obin unul din cellalt prin permutarea literelor.

24. Se consider un text cu maximum 255 de caractere, format din litere mici ale alfabetului englez
i spaii. Textul conine cel puin o consoan. Scriei un program C++ care citete de la tastatur
textul i apoi determin transformarea acestuia, eliminnd numai ultima consoan care apare n
text,ca n exemplu. Programul va afia pe ecran textul obinut. Exemplu: dac de la tastatur se
introduce textul: mare frig saci pe ecran se va afia: mare frig sai.

25. Se consider un text cu maximum 255 de caractere, format din litere mici ale alfabetului englez
i spaii. Textul conine cel puin o consoan. Scriei un program C++ care citete de la tastatur
textul i afieaz pe ecran numai ultima consoan care apare n text. Exemplu: dac de la
tastatur se introduce textul mare frig saci pe ecran se va afia: c.

26. Se citete un cuvnt format din litere mici. S se afieze cuvintele care se obin prin eliminarea
succesiv a primei i ultimei litere din irul citit. Exemplu:informatica se afieaz pe ecran
cuvintele:
informatica
nformatic
formati
ormat
rma
m

27. Se citeste de la tastatur o secven format din maxim 100 de litere mici, pn la ntlnirea
caracterului punct. Dac exist n secvena citit litere alturate egale, aceste litere vor fi
eliminate. Dac n urma eliminrii se obin din nou litere alturate egale, se elimin si acestea,
eliminrile efectundu-se pn cnd n secven nu exist litere alturate egale. S se afiseze
caracterele rmase dup ce s-au executat toate aceste operaii de eliminare.Exemplu: dac se
citeste secvena aacbooobcaxa, se va afisa: axa.

28. Fiierul text BAC.TXT conine prenumele elevilor unei clase, cte un BAC.TXT
prenume (ir de maximum 20 de caractere) pe o linie a fiierului. Scriei un Elena
program eficient care afeaz pe ecran numrul de caractere ale celui mai Gheorghe
Andreea
lung prenume precum i numrul prenumelor cu aceast lungime. De Maria
exemplu pentru fiierul alturat valorile afiate sunt 8 2 (Gheorghe i Vasilica
Vasilica au 8 caractere).

29. Pentru dou iruri de caractere cu maximum 250 de caractere fiecare (litere mici ale alfabetului
englez), cu caracterele n ordine alfabetic, introduse de la tastatur, se cere s se afieze pe
ecran un al treilea ir, format din toate caracterele primelor dou, aezate n ordine alfabetic.
Alegei un algoritm de rezolvare, eficient din punct de vedere al timpului de executare. De
exemplu pentru sir1=ampstz i sir2=bfgostx se va afia abfgmopssttxz.
30. Se citesc de la tastatur dou iruri de caractere formate din cel mult 50 de litere fiecare. S se
afieze pe ecran irul format prin preluarea alternativ, din fiecare ir, a cte unei litere (prima
liter a primului ir, apoi prima liter a celui de-al doilea, apoi a doua liter a primului ir, apoi a
doua liter a celui de-al doilea ir etc). Cnd se epuizeaz literele din unul dintre iruri, se vor
prelua toate literele rmase din cellalt ir. Dac se citesc irurile ABC i MNPRTXB se va afia
irul AMBNCPRTXB.

31. Pe prima linie a fiierului text BAC.TXT se gsete un cuvnt de exact 9 litere mici ale alfabetului
englez. Pe a doua linie a fiierului se gsete o cifr nenul k. Se cere s se scrie un program
care afieaz pe ecran, de k ori, cel de al k-lea caracter de pe prima linie a fiierului BAC.TXT.
De exemplu dac fiierul BAC.TXT are urmtorul coninut:
algoritmi
5
se va afia pe ecran:
rrrrr

32. Scriei programul C++ care citete de la tastatur un ir cu maximum 255 de caractere format
numai din litere mici i mari ale alfabetului englez i l scrie n fiierul bac.out codificat conform
urmtoarei reguli: dac numrul de vocale (a,e,i,o,u,A,E,I,O,U) din ir este mai mare sau egal cu
numrul de consoane din ir, fiecare vocal se va nlocui cu caracterul urmtor din alfabetul
englez, altfel fiecare consoan se va nlocui cu caracterul precedent din alfabetul englez. De
exemplu, pentru irul bacalaureat, fiierul va conine irul bbcblbvrfbt deoarece irul iniial are
6 vocale i 5 consoane; pentru irul basca, fiierul va conine irul aarba deoarece irul iniial are
2 vocale i 3 consoane.

33. Se citete de la tastatur o fraz cu maxim 250 de caractere. Se cere s se afieze cte semne
de punctuaie sunt. Semne de punctuaie se consider urmtoarele caractere: { . , : ; - ? ! }
Exemplu: Date de intrare Date de ieire Explicaie
Nu-i rau, mai Stefane, sa stie 15 Cele 15 semne de punctuaie
si baiatul tau oleaca de carte. sunt: - , , . . , , , - - - . , , ?
Cartea iti aduce si oarecare
mangaiere. Ei, mai Stefane si
Smaranduca, mai ramaneti
cu sanatate, ca eu m-am
dusu-m-am. Hai, nepoate,
gata esti?

34. Se citesc mai multe cuvinte de la tastatur. S se afieze cuvintele n ordine alfabetic
descendent.

35. Se citete de la tastatur un text cu maxim 250 de caractere. S se afieze pe ecran textul obinut
prin nlocuirea tuturor vocalelor cu litera a sau A, dup cum vocala respectiv este liter mic
sau liter mare. Exemplu:

Date de intrare Date de ieire Explicaie


Stiam sa recunosc si sa Staam sa racanasc sa sa Vocala O a fost nlocuit
deosebesc, de la prima daasabasc, da la prama cu A, restul vocalelor cu
vedere, China de Arizona. O vadara, Chana da Arazana. A a.
astfel de abilitate e folositoare astfal da abalatata a
daca te ratacesti noaptea. falasataare daca ta ratacasta
naaptaa.
36. Se consider declarrile de mai jos: i=0;
while (i<strlen(s)-1)
char s[ ]=abbacdde; if (s[i]==s[i+1])
int i; {
Ce ir reine variabila s dup executarea secvenei de strcpy(s+i,s+i+2);
instruciuni alturate? if (i>0) i=i-1;
}
else i=i+1;

37. Ce se afieaz pe ecran n urma executrii secvenei de cout<<strlen(s);


program alturate, n care variabila s memoreaz un ir cu while (i<strlen(s))
cel mult 12 caractere, iar i este de tip ntreg? if (s[i]=='a')
char s[12]="abaddaaghed"; strcpy(s+i,s+i+1);
i=0; else
i++;
cout<<" "<<s;

38. Scriei ce se afieaz pe ecran n urma executrii cout<<strlen(s);


secvenei de program alturate,n care variabila s while (i<strlen(s))
memoreaz un ir de cel mult 12 caractere, iar variabila if (s[i]=='a' || s[i]=='e' ||
i este de tip ntreg. s[i]=='i' || s[i]=='o' ||
char s[13]="abcdefghoid"; s[i]=='u')
i=0; strcpy(s+i,s+i+1);
else i++;
cout<<" "<<s;

39. Scriei programul C++ care citete de la tastatur un ir de cel mult 40 de caractere, format doar
din litere mici ale alfabetului englez, i care afieaz pe ecran, pe o singur linie, toate vocalele
ce apar n irul citit. Vocalele vor fi afiate n ordinea apariiei lor n ir, separate prin cte un
spaiu, ca n exemplu. irul citit conine cel puin o vocal i se consider ca fiind vocale
urmtoarele litere: a, e, i, o, u. Exemplu: dac se citete irul calculator atunci pe ecran se va
afia: a u a o.

40. Scriei programul C++ care citete de la tastatur un cuvnt s de cel mult 20 litere mici ale
alfabetului englez, construiete n memorie i afieaz pe ecran cuvntul s dup eliminarea
primei i a ultimei vocale. Cuvntul s conine cel puin dou vocale. Se consider vocale literele:
a, e, i, o, u. Exemplu: dac se citete cuvntul bacalaureat, pe ecran se afieaz: bcalauret.

41. Scriei programul C/C++ care citete de la tastatur un text de cel mult 50 de caractere, (litere
mici ale alfabetului englez i spaii), text format din mai multe cuvinte, separate prin cte un spaiu,
i afieaz pe ecran textul obinut din cel iniial prin transformarea primei litere a fiecrui cuvnt
n majuscul. Exemplu: dac se citete textul azi este examen de bacalaureat se va afia Azi
Este Examen De Bacalaureat.

42. Se consider un text cu cel mult 100 de caractere (litere mici ale alfabetului englez i spaii), care
conine cel puin o vocal. Scriei un program C++ care citete de la tastatur un text de tipul
menionat mai sus i determin transformarea acestuia n memorie prin duplicarea tuturor
vocalelor din text, ca n exemplu. Programul afieaz pe ecran textul obinut. Se consider vocale
literele a, e, i, o, u. Exemplu: pentru textul problema aceea frumoasa se afieaz proobleemaa
aaceeeeaa fruumooaasaa.

43. Se citete un cuvnt format doar din litere mici, separate prin unul sau mai multe spaii. Definim
randamentul unui cuvnt ca fiind numrul de caractere distincte din cuvnt / lungimea cuvntului.
De exemplu irul caractere are randamentul 1/9=0.11. Afiai n fiierul Rezultate.out,
randamentul cuvntului citit cu dou zecimale.Exemplu: dac se citete cuvntul:probleme
fiierul Rezultate.out va avea urmtorul coninut: 0.75.
44. Pentru un ir de caractere s, citit de la tastatur s se construiasc i s se afieze un ablon
acesta fiind un alt ir de caractere de aceiai lungime cu s, ce conine doar caractere din mulimea
{*, ?, #}, astfel nct fiecare poziie din s n care se gsete o vocal s fie codificat cu caracterul
*, pe fiecare poziie din s n care apare o consoan s fie codificat cu # i pe fiecare poziie din
s n care apare orice alt caracter s fie codificat cu ?. Se consider vocal orice liter din mulimea
{a,e,i,o,u}. Exemplu: pentru irul: informatica_ , pe ecran se va afia *##*##*#*#*?

45. Fiierul atestat.in conine o singur linie pe care se afl scris un text format din cel mult 200 de
caractere, primul caracter fiind liter, iar cuvintele din text sunt separate prin cte un spaiu.
Fiecare cuvnt este format doar din litere mari sau mici ale alfabetului limbii engleze.
S se scrie un program care:
a) s afieze textul pe o singur linie a ecranului, scris cu majuscule;
b) s afieze n fiierul atestat.out numrul consoanelor din text;
Exemplu: atestat.in conine irul Imi place Informatica
Se va afia:
IMI PLACE INFORMATICA
10
46. Se consider un text alctuit din cel mult 250 de caractere, n care cuvintele sunt formate doar
din litere mici ale alfabetului englez i sunt separate prin unul sau mai multe caractere *. Scriei
un program C++ care citete de la tastatur textul i afieaz pe ecran, pe cte o linie, toate
secvenele formate din cte dou litere identice, ca n exemplu.
Exemplu: dac textul citit este: cand*lucreaza**pe*grupe***copiii*trebuie*sa*coopereze se
afieaz perechile de mai jos:
ii
ii
oo

47. Se citesc mai multe cuvinte din fiierul de intrare fraze.txt. S se afieze, pe cte un rnd,
cuvintele din fiier, lungimile lor i s se afieze n final lungimea maxim i minim a cuvintelor
citite din fiier.
Exemplu:
eu sunt printre cei cuminti din scoala
Eu 2
Sunt 4
Printre 7
Cei 3
Cuminti 7
Din 3
Scoala 6
Lungimea minima a cuvintelor este 2
Lungimea maxima a cuvintelor este 7

48. Fiierul fisier.txt conine pe prima linie un numr natural nenul, n, i 5


pe fiecare dintre urmtoarele n linii cte un singur cuvnt format din tabac
cel mult 20 de litere mici ale alfabetului englez. S se scrie un laureat
program C++ care citete valoarea n i apoi determin cte dintre tabacar
cele n cuvinte memorate n fiier conin secvena bac. Programul va bacterie
afia pe ecran numrul de cuvinte determinat (0 n caz c nu exist barca
niciunul). Exemplu: pentru fiierul alturat se afieaz 3.

49. Scriei programul C++ care citete de la tastatur un cuvnt cuv1 avnd cel mult 10 caractere,
construiete cuvntul cuv2 format astfel: prima liter a cuvntului cuv1 scris o singur dat, a
doua liter a cuvntului cuv1 repetat de dou ori, a treia liter a cuvntului cuv1 repetat de trei
ori, etc. i afieaz pe ecran cuvntul cuv2. Exemplu: pentru cuv1=mama se va afia cuv2
maammmaaaa.
50. Scriei programul C++ care citete de la tastatur un ir de cel mult 100 de caractere, format doar
din literele mici ale alfabetului englez i caractere spaiu. Programul afieaz pe ecran irul
codificat astfel:
dup fiecare vocal se adaug consoana imediat urmtoare (dup a se insereaz b, dup i se
insereaz j, .a.m.d.);
la sfritul irului se adaug grupul de litere stop. Exemplu: dac irul iniial este azi este
proba de informatica , dup codificare se afieaz: abzij efstef propbab def
ijnfoprmabtijcabstop.

51. Se citete de la tastatur un text format din cuvinte separate ntre ele prin cte un spaiu. Fiecare
cuvnt are cel mult 40 de caractere, doar litere mici ale alfabetului englez. Textul are cel mult 200
de caractere. Scriei programul C++ care afieaz pe ecran, pe linii separate, doar cuvintele din
textul citit care conin cel mult trei vocale. Se consider vocale: a, e, i, o, u. Exemplu:dac textul
este: pentru examenul de bacalaureat se folosesc tablouri se afieaz pe ecran:
pentru
de
se
folosesc

52. Scriei programul C++ care citete de la tastatur un cuvnt de cel mult 15 litere mici ale
alfabetului englez i care afieaz pe ecran, pe linii distincte, cuvintele obinute prin tergerea
succesiv a vocalelor din cuvntul citit, de la stnga la dreapta, ca n exemplu de mai
jos.Exemplu: Dac se citete cuvntul examen se afieaz:
xamen
xmen
xmn

53. Scriei programul C++ care citete de la tastatur un cuvnt de cel mult 15 litere mici ale
alfabetului englez i care scrie pe ecran, pe linii distincte, cuvintele obinute prin tergerea
succesiv a vocalelor n ordinea alfabetic a lor (a, e, i, o, u). La fiecare pas se vor terge toate
apariiile din cuvnt ale unei vocale (ca n exemplu). Exemplu: Dac se citete cuvntul
bacalaureat se afieaz:
bcluret (s-au sters toate cele patru apariii ale vocalei a)
bclurt (s-a sters unica apariie a vocalei e)
bclrt (s-a sters unica apariie a vocalei u)

54. Scriei programul C++ care citete din fiierul text bac.txt un cuvnt de cel mult 15 litere mici ale
alfabetului englez i care scrie pe ecran mesajul corect dac n cuvnt vocalele apar n ordine
alfabetic (a, e, i, o, u) i niciuna dintre ele nu se repet, iar n caz contrar scrie pe ecran mesajul
incorect. De exemplu: dac din fiierul bac.txt se citete cuvntul tablou, pe ecran se afieaz
mesajul corect, dac din fiier se citete cuvntul interval se scrie mesajul incorect pentru
c vocalele nu apar n ordine alfabetic, iar dac din acelai fiier se citete cuvntul exemplu
se scrie mesajul incorect pentru c vocala e apare de dou ori.

55. Se consider fiierul text Cuvinte.in ce conine pe prima linie un numr natural nenul n (n<=100)
iar pe urmtoarele n linii cte un cuvnt cu maximum 10 litere mici ale alfabetului englez. S se
afieze pe ecran cuvintele din fiierul dat care sunt palindroame. n cazul n care nu exist nici
un cuvnt palindrom se va afia mesajul NU. Un cuvnt este palindrom dac citindu-l de la
dreapta la stnga sau de la stnga la dreapta se obine acelai cuvnt. De exemplu dac fiierul
Cuvinte.in are urmtorul coninut:
3
sas
creion
ion
atunci se va afia pe ecran :
sas
56. Prin asocierea fiecrei litere mici din alfabetul englez cu un numr egal cu poziia literei n alfabet,
se poate codifica orice secven de litere mici cu o secven de numere. Scriei un program C++
care citete din fiierul text cod.txt un numr n (0<n<30000)i, de pe rndul urmtor, o secven
de n litere mici. Folosind un algoritm eficient din punctul de vedere al gestionrii memoriei,
programul va codifica secvena de caractere citit i va scrie pe ecran numerele asociate,
separate prin spaii. Exemplu: pentru fiierul cod.txt:
7
bacinfo
se vor afia pe ecran, n ordine, numerele:2 1 3 9 14 6 15.

57. Fiierele text X.TXT i Y.TXT conin fiecare numele a 7 persoane, cte un nume pe fiecare
linie, fiecare nume avnd cel mult 15 litere.tiind c n fiecare fiier numele sunt memorate n
ordine alfabetic, scriei un program C++ care s citeasc din cele dou fiiere i s afieze pe
ecran toate numele din cele dou fiiere n ordine alfabetic, separate printr-un singur spaiu.
Exemplu:
Daca fiierul X.TXT are coninutul iar fiierul Y.TXT are coninutul :
Ana Angi
Dana Cora
Daniel Dora
Ene Horia
Mara Oana
Nae Paul
Paul Tibi
Se va afia pe ecran :
Ana Angi Cora Dana Daniel Dora Ene Horia Mara Nae Oana Paul Paul Tibi

58. Scriei un program care citete de la tastatur 4 iruri de caractere, oricare dou distincte, formate
din maximum 14 litere mici fiecare. S se creeze fiierul bac.txt n care s se scrie toate
perechile de iruri dintre cele citite, perechi de forma x,y n care irul x este subsecven a irului
y sau irul y este subsecven a irului x. Fiecare pereche determinat se va scrie n fiierul
bac.txt pe cte un rnd separate printr-o virgul. Dac nu exist nicio astfel de pereche, n
fiierul bac.txt se va scrie textul FR SOLUIE.Exemplu:
Se citesc:
ari
calculator
mari
lat
Se afieaz n bac.txt
ari,mari
calculator,lat.

59. Fiierul text cuvinte.in conine mai multe linii nevide de text, fiecare linie de cel mult 255 de
caractere. Orice linie este compus din unul sau mai multe cuvinte separate prin cte un
spaiu.S se scrie un program care citete de la tastatur un numr natural L i scrie n fiierul
text cuvinte.out toate cuvintele de lungime L din fiierul de intrare, n ordinea n care apar ele n
text.Cuvintele vor fi scrise pe prima linie a fiierului, separate prin cte un spaiu.De exemplu
pentru fiierul cuvinte.in de mai jos i L=4
A fost odata
Ca niciodata
O fata frumoasa de imparat
Fiierul cuvinte.out va conine: fost fata.
60. Se citesc de la tastatur n propoziii (0<n<101), avnd fiecare maximum 255 de caractere. tiind
c oricare dou cuvinte consecutive dintr-o propoziie sunt desprite printr-un singur spaiu i c
fiecare propoziie se termin cu Enter, s se afieze pe ecran propozia care are cele mai multe
cuvinte. Dac dou sau mai multe propoziii au acelai numr de cuvinte se va afia prima dintre
ele, n ordinea citirii.De exemplu, pentru n = 3 i urmtorele propoziii:
Azi sunt inca elev.
Maine am examen de bac.
Ura, voi fi student!
Se va afia Maine am examen de bac.

61. S se scrie programul C++ care citete de la tastatur un cuvnt de maximum 20 de litere i
minimum o liter i terge litera din mijloc n cazul n care cuvntul are un numr impar de litere,
respectiv cele dou litere din mijlocul cuvntului dac acesta are un numr par de litere.
Programul va afia cuvntul rezultat n urma tergerii sau mesajul CUVANT VID dac dup
tergere acesta rmne far nicio liter. Exemplu : dac se citete cuvntul carte, se va afia
cate; dac se citete cuvntul cartea, se va afia caea.

62. Fiierul CUVINTE.IN are pe prima linie un numr natural n (0<n<100) iar pe urmtoarele n linii
cte un cuvnt de cel mult 20 litere. S se scrie un program C++ care citete cuvintele din fiier
i scrie n fiierul CUVINTE.OUT cuvintele citite, n ordinea cresctoare a lungimii lor, cte un
cuvnt pe o linie.Exemplu
CUVINTE.IN CUVINTE.OUT
5 EXAMEN
EXAMEN LIMBAJ
LIMBAJ SCRISA
INFORMATICA INFORMATICA
SCRISA BACALAUREAT
BACALAUREAT

63. Fiierul bac.txt conine pe fiecare linie cte un ir de maximum 100 de caractere, litere mici ale
alfabetului englez. Scriei un program care afieaz pe cte o linie a ecranului fiecare ir citit din
fiier precum i cel obinut din acesta prin eliminarea vocalelor, separate printr-un spaiu. De
exemplu dac fiierul bac.txt conine:
iepure
oaie
bcd
Se va afia:
iepure pr
oaie
bcd bcd

64. Scriei un program C++ care citete de la tastatur dou iruri de caractere cu cel mult 200 de
caractere fiecare i care afieaz pe ecran toate caracterele comune celor dou iruri. Fiecare
caracter se va afia o singur dat, caracterele afindu-se separate printr-un spaiu. De exemplu
pentru irurile: matrice i principal se va afia: r i c a, nu n mod obligatoriu n aceast
ordine.

65. Se consider un text cu cel mult 100 de caractere (litere mici ale alfabetului englez si spaii), n
care cuvintele sunt separate prin cte un spaiu. naintea primului cuvnt si dup ultimul cuvnt
nu exist spaii. Scriei un program C++ care citete de la tastatur un text de tipul menionat mai
sus i determin transformarea acestuia n memorie prin nlocuirea fiecrui cuvnt format din trei
litere cu simbolul *. Programul afieaz pe ecran textul obinut. Exemplu: pentru textul bun este
izvorul ce are apa rece se afieaz * este izvorul ce * * rece.

66. Se consider un text cu cel mult 70 de caractere (litere mici ale alfabetului englez si spaii), n
care cuvintele sunt separate prin unul sau mai multe spaii. naintea primului cuvnt i dup
ultimul cuvnt nu exist spaii. Scriei un program C++ care citete de la tastatur un text de tipul
menionat mai sus i afieaz pe ecran numrul de cuvinte n care apare litera a. Exemplu:
pentru textul voi sustine examenul la informatica se afieaz 3.
67. Se consider un text cu cel mult 100 de caractere (litere mici ale alfabetului englez i spaii), n
care cuvintele sunt separate prin unul sau mai multe spaii. naintea primului cuvnt i dup
ultimul cuvnt nu exist spaiu. Scriei un program C/C++ care citete de la tastatur un text de
tipul menionat mai sus i determin transformarea acestuia n memorie prin eliminarea unor
spaii, astfel nct ntre oricare dou cuvinte alturate s rmn exact un spaiu. Programul
afieaz pe ecran textul obinut.
Exemplu: pentru textul
in vacanta plec la mare
se obine i se afieaz
in vacanta plec la mare
68. Scriei un program C++ care citete de la tastatur un numr natural n (2n20) si apoi n cuvinte
distincte, fiecare fiind format din cel mult 20 de caractere, numai litere mici ale alfabetului englez.
La introducerea datelor, dup fiecare cuvnt se tasteaz Enter. Programul afieaz pe ecran
numrul de cuvinte dintre ultimele n-1 citite, care se ncheie cu primul cuvnt citit.
Exemplu: dac n=5 si cuvintele citite sunt:
oare
soarele
stropitoare
oarecare
cicoare
pe ecran se afieaz 2 (deoarece cuvintele stropitoare si cicoare se ncheie cu oare).
69. Se consider dou iruri de caractere a, de lungime na i b, de lungime nb. irul a este numit
sufix al irului b dac nanb i subirul lui b determinat de ultimele sale na caractere coincide
cu a. n secvena de instruciuni de mai jos variabila i este de tip ntreg, iar variabila s memoreaz
un ir cu cel mult 20 de caractere. Fr a utiliza alte variabile, scriei una sau mai multe instruciuni
care pot nlocui punctele de suspensie astfel nct, n urma executrii secvenei obinute, s se
afieze pe ecran, n ordinea descresctoare a lungimii, separate prin cte un spaiu, toate sufixele
irului memorat n variabila s, ca n exemplu.
Exemplu: pentru irul elevi se afieaz: elevi levi evi vi i
for(i=0;i<strlen(s);i++)
..................
70. Se consider dou iruri de caractere a, de lungime na i b, de lungime nb. irul a este numit
prefix al irului b dac nanb i subirul lui b determinat de primele sale na caractere coincide
cu a. irul a este numit sufix al irului b dac nanb i subirul lui b determinat de ultimele sale
na caractere coincide cu a. Scriei un program C++ care citete de la tastatur dou cuvinte,
fiecare fiind format din cel mult 30 de caractere, numai litere mici ale alfabetului englez. Dup
primul cuvnt se tasteaz Enter. Programul afieaz pe ecran, separate prin cte un spaiu, toate
sufixele primului cuvnt care sunt prefixe ale celui de al doilea cuvnt, ca n exemplu. Dac nu
exist astfel de subiruri, se afieaz pe ecran mesajul NU EXISTA.
Exemple:
dac se citesc, n ordine, cuvintele
rebele
elegant
se afieaz (nu neaprat n aceast ordine) subirurile: e ele
iar dac se citesc, n ordine, cuvintele
strai
rai
se afieaz subirul rai
71. Se consider un text cu cel mult 100 de caractere, format din cuvinte si numere, separate prin
unul sau mai multe spaii. Cuvintele sunt formate numai din litere ale alfabetului englez. Toate
numerele sunt reale, pozitive si sunt formate numai din parte ntreag sau din parte ntreag si
parte fracionar, separate prin punctul zecimal (.).Scriei un program C++ care citete de la
tastatur textul, pe care l transform, eliminnd din componena sa toate numerele care au parte
fracionar. Programul afieaz apoi pe ecran textul obinut. Exemplu: dac textul citit este
Reprezentat cu 4 zecimale PI este 3.1415 si e este 2.7182 se va afia pe ecran textul:
Reprezentat cu 4 zecimale PI este si e este
72. Scriei un program C++ care citete de la tastatur un cuvnt cu maximum 20 de litere i minimum
o liter, construiete i afieaz pe ecran cuvntul obinut din inversarea literelor din prima
jumtate a cuvntului cu cele din jumtatea a doua. Literele din fiecare jumtate i pstreaz
ordinea din cuvntul iniial, ca n exemplu. n cazul n care cuvntul are un numr impar de litere,
atunci litera din mijloc va rmne pe loc. Exemplu: dac se citete cuvntul caiet se va obine
cuvntul etica, iar dac se citete cuvntul cada se va obine daca.

73. Un ir de caractere s se numete ablon pentru un alt ir de caractere x, dac este format din
caractere din mulimea {*,?,#}, are aceeai lungime cu x i pe fiecare poziie din s n care apare
* n x se gsete o vocal, pe fiecare poziie din s n care apare # n x se gsete o consoan i
pe fiecare poziie din s n care apare ? putem avea orice caracter n x. Se consider vocal orice
liter din mulimea {a,e,i,o,u}. Scriei programul C++ care citete de la tastatur dou iruri de
caractere, de aceeai lungime, formate din cel mult 200 de litere mici ale alfabetului englez, i
afieaz pe ecran un ablon comun celor dou iruri citite, care conine un numr minim de
caractere ?. Exemplu: pentru irurile diamant i pierdut se afieaz #**#??#

74. Scriei un program n limbajul C++ care citete de la tastatur un singur ir format din cel mult 20
de caractere care reprezint numele i prenumele unei persoane. ntre nume i prenume se afl
un numr oarecare de caractere spaiu (cel puin unul). Att numele ct i prenumele sunt formate
numai din litere ale alfabetului englez. Programul construiete n memorie i afieaz pe ecran
un al doilea ir de caractere, care s conin prenumele, urmat de exact un spaiu i apoi numele
din irul citit iniial. Exemplu: dac se citete irul: Popescu Vasile se va construi i apoi se va
afia pe ecran irul Vasile Popescu

75. Scriei un program n limbajul C++ care citete de la tastatur un singur ir, format din cel mult
20 de caractere, care reprezint numele i prenumele unei persoane. ntre nume i prenume se
afl un numr oarecare de caractere spaiu (cel puin unul). Att numele, ct i prenumele, sunt
formate numai din litere mici ale alfabetului englez. Programul construiete n memorie i afieaz
pe ecran un alt ir de caractere, care s conin iniiala prenumelui (prima liter a prenumelui),
urmat de un caracter punct, de exact un spaiu i de numele din irul citit iniial. Toate literele
din irul afiat vor fi de asemenea litere mici. Exemplu: dac se citete irul:popescu vasile se
va construi i apoi se va afia pe ecran irul v. popescu.

76. Scriei un program n limbajul C++ care citete de la tastatur dou iruri, formate fiecare din cel
mult 20 de caractere. Primul ir reprezint numele unei persoane, iar al doilea ir reprezint
prenumele aceleiai persoane. Att numele ct i prenumele sunt formate numai din litere ale
alfabetului englez i fiecare conine cel puin o consoan. Programul construiete n memorie i
afieaz pe ecran un al treilea ir de caractere, care conine consoanele din prenumele citit
dispuse n ordinea n care apar n prenume urmate de exact un spaiu i de numele citit.
Exemplu: dac primul ir citit este Popescu, iar al doilea este Vasile se va construi i apoi se
va afia pe ecran irul Vsl Popescu.
77. S se scrie un program n C++ care s permit gestiunea crilor dintr-o bibliotec, prin
intermediul unui meniu interactiv cu urmtoarele opiuni:
1. Adugare carte (titlu i autor)
2. Cutare dup titlu
3. Cutare dup autor
4. tergere carte