Sunteți pe pagina 1din 33

Centrul de Excelență în Economie și Finanțe

Unitatea de curs:
Programarea structurată
Profesor: Eugenia Burca
Master în Informatica
Email: eugeniaburca69@gmail.com
Unitatea de curs:
Programarea structurată
Tema lecției: Tablouri de caractere
Tabloul de caractere
Pentru memorarea șirurilor în C++ se utilizează tablouri de
caractere de bază char, care au ca ultim element un terminator
de șir, caracterul null(zero ASCII), ‘\0’.

Declararea:
char nume [lg];
nume – identificator, precizează numele dat tabloului
lg – numărul maxim de caractere dintr-un șir
Tabloul de caractere
Exemple:

‘ ‘ – spațiu
‘A‘ – caracterul A
‘1‘ – caracterul unu
‘+‘ – caracterul plus

“ 12+abc=65” - șir de caractere


Tabloul de caractere
Declarare și Inițializare. Exemple:
char m[100] // în variabila m pot fi păstrate până la 100 de caractere, iar în variabila b doar
un singur caracter;

char sir[]=”Ador programarea!”; // compilatorul va determina numărul maxim


de caractere care poate fi memorat în variabila sir

char a[4567]= ”Programare Structurata”; // numărul maxim de caractere


care poate fi memorat în variabila a este de 4567, iar primele 22 de pozții sunt inițializate
Tabloul de caractere
Accesul la elementele tabloului. Exemple:
char v[]=”Byte”;

B y t e \0

v[0] v[1] v[2] v[3] v[4]


Exemple
1) char sir[5]=”abcd”;
Se rezervă zone de memorie pentru sir[0], sir[1], sir[2], sir[3], sir[4] si
sir[5] sir[0] ia ca valoare codul ASCII a literei mici a sir[1] ia ca valoare
codul ASCII a literei mici b
sir[2] ia ca valoare codul ASCII a literei mici c
sir[3] ia ca valoare codul ASCII a literei mici d
sir[4] ia ca valoarea 0( codul ASCII al caracterului NULL)
2) char sir[5]=”12345”. Dă eroare la compilare, deoarece nu rămâne element care să memorize NULL.
3) char sir[]=”12345”;
Se rezervă zona de memorie sir[0], care ia ca val. Cod ASCII a cifrei 1
Se rezervă zona de memorie sir[1], care ia ca val. Cod ASCII a cifrei 2
Se rezervă zona de memorie sir[2], care ia ca val. Cod ASCII a cifrei 3
Se rezervă zona de memorie sir[3], care ia ca val. Cod ASCII a cifrei 4
Se rezervă zona de memorie sir[4], care ia ca val. Cod ASCII a cifrei 5
Se rezervă zona de memorie sir[5], care ia ca val. Cod ASCII al caracterului NULL
Tabloul de caractere
Modalități de afișare.
char t[]=”Limbajul C++”;
cout<<t; // scrie in consola Limbajul C++
t[8]=’\0’; cout<<t; // scrie in consola Limbajul

puts(char[]); // afiseaza elementele tabloului de caractere si trece din


linie noua
char t[]=”unu”;
char e[10]=”doi”;
cout<<t<<endl<<e<<endl;
puts(t);
puts(e);
Tabloul cu două dimensiuni - matrice
Modalități de citire.
char t[100];
cin>>t; // citește caractere până la întâlnirea spațiu, enter sau terminator de șir ^z (ctrl+z);

gets(t) // citește caractere până la întâlnirea caracterului enter sau ^z

int strle(char[]) // returnează numărul de caractere ale tabloului

char t[]=”123456789”;
int i;
i=strlen(t); // returnează i=9

Atenție! Pentru utilizarea funcțiilor de prelucrare a tabloului de caractere se va include biblioteca string / cstring
Tabloul de caractere
Problema 1: de la tastatură se citește o frază
(cuvintele se despart printr-un singur spațiu).
Elaborați un program prin intermediul căruia:
a) se va determina numărul de cuvinte
b) se va înlocui caracterul a cu b, iar silaba me cu to.
Tabloul de caractere
Problema 2: de la tastatură se citește un șir de
caractere. Elaborați un program prin intermediul
căruia se va verifica dacă șirul introdus este
palindrom. Palindrom este un cuvânt care poate fi
citit atât de la stânga la dreapta , cât și de la dreapta
la stânga, sensul rămânând același.
Transformarea șirurilor de caractere
Funcția strlwr(sir) are rolul de a converti toate literele mari din sir în litere
mici. Restul caracterelor rămân neschimbate;

Funcția strupr(sir) – are rolul de a converti toate literele mici din sir în
litere mari. Restul
caracterelor rămân neschimbate

Exemplu:
char a[]=“Abecedar.1”;
strupr(a); puts(a); // afiseaza ABECEDAR.1
strlwr(a); puts(a); //afiseaza abecedar.1
Tabloul de caractere
Problema 3: de la tastatură se citesc două șiruri
de caractere. Să se afișeze caracterele comune de
pe aceeași poziție fără a se face distincție dintre
minuscule și majuscule.
Copierea șirurilor de caractere
Funcția strcpy(sir_destinatie,sir_sursa) – copiază șirul sir_ sursa
în sir_destinatie (se simuleaza atribuirea a=b).
ATENTIE!! Nu este permisa atribuirea intre doua siruri de caractere
folosind operatorul =. Atribuirea se face folosind functia strcpy.

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”;

Functia strlen(nume_sir); – returnează lungimea efectivă a unui șir (fără a


număra și terminatorul de șir).
Exemplu:
char a[50]=”ora de informatica”; // strlen(a) = 18
Tabloul de caractere
Problema 4: de la tastatură se citesc două șiruri de
caractere. Să se interschimbe conținutul celor două
șiruri de caractere.
Copierea șirurilor de caractere
Funcția strcpy(sir_destinatie,sir_sursa, n) – copiază cel mult n caractere
ale unui șir dintr-o zonă de memorie în alta.
ATENTIE!! Dacă n>lungimea șirului, atunci efectul este similar
funcței strcpy, altfel se copiază numai primele n caractere ale șirului.

Exemplu:
char a[]=”Acest sir se copiaza trunchiat”,b[17];
strcpy(b,a,10); // a = ”Acest sir ”; se copiază numai primele
10 caractere
Concatenarea șirurilor de caractere
Funcția strcat(dest,sursa) – adaugă șirului dest șirul sursă. Șirul
sursă rămâne nemodificat. Operația se numește concatenare și nu
este comutativă.

Exemplu:
char a[]=”vine ”,b[]=”vacanta?”;
strcat(a,b); // a = ”vine vacanta?”;

char t1[100]=”Limbajul C++”,t2[]=”aici C este incrementat”,;


strcat(t1,” - ”); // t1 = ” Limbajul C++ - ”;
strcat(t1,t2); // t1 = ” Limbajul C++ - aici C este incrementat”;
Concatenarea șirurilor de caractere
Funcția strcat(dest,sursa,n) – adaugă șirului dest primii n pcteți ai
șirul sursă.

Exemplu:

char t1[100]=”Limbajul E este mai bun decât ”; char


t2[]=”limbajul C++ care este ...”,; strcat(t1,t2,12); //
t1 = ” Limbajul E este mai bun decât limbajul C++”;
Tabloul de caractere

Problema 5: de la tastatură se citesc două șiruri de


caractere. Să se creeze un nou șir care va fi format din
primele i caractere din primul șir și al doilea șir. Ele se
vor separa prin intermediul caracterului +. Valoarea i
se citește de la tastatură.
Compararea șirurilor de caractere
Funcția strcmp(sir1,sir2) – are rolul de a compara lexicografic două șiruri
de caractere.
Valoarea returnata este -1 (daca sir1<sir2), 0 (daca sir1==sir2) sau 1
(daca sir1>sir2).
Atenție! Functia strcmp face distinctie între literele mari și cele mici
ale alfabetului, iar funcția stricmp (sir1,sir2) nu face aceasta distincție
(i - ignore).

Exemplu:
cout<<strcmp("abcde","abcwww"); // se afisează -1
Tabloul de caractere
Problema 6: de la tastatură se citesc două cuvinte.
Să se creeze un șir de caractere care va include
ambele cuvinte în ordine crescătoare și le va separa
printr-un singur spațiu.
Compararea șirurilor de caractere
Funcția strncmp(sir1,sir2) – are rolul de a compara lexicografic primele
n caractere din două șiruri de caractere.
Valoarea returnata este -1 (daca sir1<sir2), 0 (daca sir1==sir2) sau 1
(daca sir1>sir2).
Atenție! Functia strncmp face distinctie între literele mari și cele mici ale
alfabetului, iar funcția strnicmp (sir1,sir2) nu face aceasta distincție (i -
ignore).
Exemplu:
cout<<strcmp("abcde","abcwww"); // se afisează -1
Tabloul de caractere

Problema 7: de la tastatură se citesc două șiruri de


caractere. Să se elaboreze un program prin
intermediul căruia se va determina poziția din care
cele două șiruri diferă, fără a se ține cont de
minuscule și majuscule. De ex: pentru marca și maria
se va afișa 3, deoarece începând cu poziția 3 șirurile
diferă.
Tabloul de caractere
Problema 8: de la tastatură se citesc două șiruri de
caractere. Să se afișeze toate caracterele care sunt în
primul șir și nu sunt în șirul doi.
Tema pentru acasa
Problemele de rezolvat și materialul pentru studiu se află pe cardul cu data de 10.12.2019

Prolemă: De la tastatură se citesc mai multe cuvinte separate printr-un spațiu.


Elaborați un program prin intermediul căruia:
a) Se va afișa fiecare cuvânt dintr-o linie nouă;
b) Se vor afișa doar cuvintele care conțin cel puțin două vocale;
c) Se va afișa fraza cu majuscule, iar primul caracter din fiecare cuvânt cu minuscule;
d) Se va determina numărul de apariții al unui cuvânt, care este citit de la tastatură;
e) Se vor afișa doar cuvintele palindromuri;
f) Se vor afișa grupurile de cuvinte care rimează(ultimele două caractere coincid
cu primele două);
g) Se va afișa cuvântul cel mai lung;
h) Se va afișa fiecare cuvânt în ordinea inversă a introducerii lui
Pentru rezolvarea independentă sunt propuse problemele 1-7 pagina 26-27 din
Culegere de probleme.

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