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

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


respectiv.
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 limbajul 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, 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 pn 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 cu aciuni diferite, dac
difer ntre ele prin numrul sau tipul parametrilor. (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. Apelul funciei cin.get().
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, astfel 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 afia irul: programator, prin urmare am adresat irul de la primul octet.
Dac afim cout<<sir+1, vom adresa irul de la al doilea octet, se va afia
rogramator. La adresa primului octet al irului am adunat 1 i am obinut adresa
celui de-al doilea octet 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 abcdefghijk, 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 header-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


- 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 irul 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 termin (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 lexicografic. 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 delimitatorii definii n irul 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 returnat
Funcia returneaz adresa entitii 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 conine 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 header-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*, reine 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 header-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 un ir de caractere ntr-o valoare de tip
double.
double strtod(const char *s, char **adresa, int baza);
Funcia strtold convertete un ir de caractere ntr-o valoare de tip
long double.
long double strtold(const char *s, char **adresa, int baza);
Funcia strtoul convertete un ir de caractere ntr-o valoare de tip
unsigned long.
unsigned long strtoul(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 citete un text de la tastatur. S se afieze histograma vocalelor din text.
4. Se citesc de la tastatur n numere naturale, n<=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 ir 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 apariiile 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 afiarea 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, nu se va numra.

17

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