Sunteți pe pagina 1din 41

Tipuri

structurate
de date

i rur i

de

carac t ere

Sumar
1. Competene . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2. Prezentare general . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
3. Declararea irurilor de caractere . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
4. Citirea i scrierea irurilor de caractere . . . . . . . . . . . . . . . . . . . . . . . 10
5. Prelucrarea irurilor de caractere . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
6. Aplicaii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
7. Bibliografie i webografie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

1. Competene

Competene generale
identificarea datelor care intervin ntr-o problem i a relaiilor dintre
acestea
elaborarea algoritmilor de rezolvare a problemelor
aplicarea algoritmilor fundamentali n prelucrarea datelor
identificarea conexiunilor dintre informatic i societate
Competene specifice
evidenierea necesitii structurrii datelor
prelucrarea datelor structurate
alegerea structurii de date adecvat rezolvrii unei probleme
elaborarea unui algoritm de rezolvare a unei probleme din aria
currcicular a specialitii
alegerea unui algoritm eficient de rezolvare a unei probleme
identificarea aplicaiilor informaticii n viaa social
elaborarea i implementarea unor algoritmi de rezolvare a unor
probleme cotidiene
3

2. Prezentare general
Un ir de caractere:
- este un tablou unidimensional (vector) de caractere;
- reprezint o succesiune de caractere cuprins ntre ghilimele i terminat cu
caracterul NULL notat \0;
- conine orice tip de caracter: liter mic, liter mare, cifr, caracter
special, delimitator, fiecare caracter fiind reprezentat prin codul su ASCII.
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.
Exemplu:
irul de caractere Limbajul C++ se poate reprezenta astfel:
L

\0

Prezentare general
Fiecare caracter din setul de caractere al limbajului C++ se caracterizeaz
printr-un cod unic, numit codul ASCII al caracterului, un numr ntreg ntre
0 i 255.
n cadrul setului ASCII, codurile caracterelor sunt dup cum urmeaz:
- literele mari ncepnd cu 65 (A - 65, B - 66, ..., Z - 90);
- literele mici ncepnd cu 97 (a 97, b 98, ..., z - 122);
- cifrele ncepnd cu 48 (0 48, 1 49, ..., 9 - 57).
Observaie: Diferena ntre codul ASCII al oricrei litere mici i codul ASCII
al literei mari pereche este aceeai, 32.
Exemplu:
char c1,c2;
int x;
c1='A';
x=c1+32;
//conversie implicit
c2=x;
//conversie implicit
cout<<c1<<endl<<c2<<endl<<x;
5

3. Declararea irurilor de caractere


Declararea irurilor de caractere
- vectorul de caractere trebuie declarat cu un caracter mai mult (caracterul
NULL) dect cel mai mare ir pe care l poate conine;
- un ir de caractere poate fi definit ca un vector de caractere, n dou
moduri:
char nume[dimensiune];
char *nume;
unde nume este identificatorul variabilei de tip ir de caractere, iar
dimensiune reprezint numrul maxim de caractere ce pot fi memorate
n ir (inclusiv caracterul NULL);
char nume[dimensiune];
// se declar un vector cu elemente de tip caracter;
char *nume;
// se declar un pointer ctre tipul caracter;
Observaie: caracterele irului vor ocupa poziii consecutive n vector,
ncepnd cu poziia 0
6

Declararea irurilor de caractere


Exemplul 1:
char sir[20];
- se declar un ir de caractere n care vor putea fi memorate maxim 19
caractere;
- dac variabila sir reine irul informatica, reprezentarea n
memoria intern este urmtoarea:
sir

\0

\0

\0

\0

\0

\0

\0

\0

\0

10

11

12

13

14

15

16

17

18

19

unde: sir[0]=i
sir[1]=n
sir[2]=f

sir[10]=a
- caracterul NULL (\0) este adugat automat de ctre compilator;
- lungimea irului de caractere este dat de numrul de caractere (n
exemplu este de 11);
7

Declararea irurilor de caractere


Exemplul 2:
char s[5];
- se declar un ir de caractere n care vor putea fi memorate maxim 4
caractere;
- dac variabila s reine irul algoritm, reprezentarea n memoria
intern este urmtoarea:
s

\0

Declararea irurilor de caractere


Exemplul 3:
char a[15]=calculator;
- se declar un ir de caractere n care vor putea fi memorate maxim 14
caractere;
- irul de caractere a a fost iniializat la declararea lui, iar reprezentarea n
memoria intern este urmtoarea:
c

\0

\0

\0

\0

\0

10

11

12

13

14

- dac se iniializeaz irul de caractere, nu mai este nevoie s se


precizeze lungimea maxim a irului, aceasta fiind calculat de ctre
compilator:
char a[]=calculator;

4. Citirea i scrierea irurilor de caractere


Citirea irurilor de caractere
Citirea se face folosind instruciunea cin n dou moduri:
- la nivel de caracter;
- la nivelul irului de caractere.
a. Citirea la nivel de caracter (caracter cu caracter)
cout<<numarul de caractere:;
cin>>n;
for(i=0;i<n;i++)
cin>>sir[i];
sir[i]=NULL;
- dac citirea irului de caractere se face caracter cu caracter trebuie
adugat caracterul NULL la sfritul irului de caractere.

10

Citirea i scrierea irurilor de caractere


b. Citirea la nivelul irului de caractere
cin>>sir;

- n acest caz caracterul NULL este adugat automat de ctre compilator;


- operaia de citire de la tastatur se termin atunci cnd a fost introdus
un caracter alb (spaiu sau Enter);
- pentru a citi caracterul spaiu se folosete funcia get care are dou
forme.

11

Citirea i scrierea irurilor de caractere


Forma 1:
cin.get(sir,nr,ch);
unde:
sir este o variabil de tip ir de caractere care se va citi;
nr este o variabil de tip ntreg i reprezint numrul maxim de
caractere care vor fi citite, inclusiv caracterul NULL;
ch este o variabil de tip caracter care reprezint caracterul care
ncheie citirea irului;

- dac al treilea parametru lipsete, se consider implicit caracterul \n


generat de tasta Enter.
Forma 2:
cin.get();
- folosit dup o fucie cin.get() cu parametri pentru a descrca din
fluxul de date ultimul caracter citit, care ar mpiedica efectuarea unei a
doua operaii de citire de la tastatur.
12

Citirea i scrierea irurilor de caractere


Exemplul 1:
char s1[10];
cin>>s1;
//dac introducem textul informatica i tastm Enter se memoreaz
n variabila s1 irul informati;
Exemplul 2:
char s2[10];
cin>>s2;
//dac introducem textul informat i tastm Enter se memoreaz n
variabila s2 irul informat;
Exemplul 3:
char s3[10];
cin>>s3;
//dac introducem textul info arena i tastm Enter se memoreaz
n variabila s3 irul info;

13

Citirea i scrierea irurilor de caractere


Exemplul 4:
char s4[10];
cin.get(s4,10);
//dac introducem textul informatica i tastm Enter se memoreaz
n variabila s4 irul informati;
Exemplul 5:
char s5[10];
cin.get(s5,5);
//dac introducem textul informatica i tastm Enter se memoreaz
n variabila s5 irul info;
Exemplul 6:
char s6[10];
cin.get(s6,10);
//dac introducem textul info arena i tastm Enter se memoreaz
n variabila s6 irul info aren;

14

Citirea i scrierea irurilor de caractere


Exemplul 7:
char s7[10];
cin.get(s7,10,'$');
//dac introducem textul informat$ i tastm Enter se memoreaz n
variabila s7 irul informat;
Exemplul 8:
char s8[10];
cin.get(s8,10);
//dac introducem textul info$arena i tastm Enter se memoreaz
n variabila s8 irul info$aren;
Exemplul 9:
char s9[10];
cin.get(s9,9,\n);
//dac introducem textul info arena$ i tastm Enter se memoreaz
n variabila s9 irul info are;

15

Citirea i scrierea irurilor de caractere


Exemplul 10:
char a[10], b[10];
cin.get(a,10);
cin.get(b,10);
//dac introducem textul info i tastm Enter se memoreaz n
variabila a irul info i nu va putea fi citit al doilea ir;
Exemplul 11:
char a[10], b[10];
cin.get(a,10);
cin.get();
cin.get(b,10);
//dac introducem textul info i tastm Enter i apoi introducem irul
arena i tastm Enter se memoreaz n variabila a irul info i n
variabila b irul arena;

16

Citirea i scrierea irurilor de caractere


Exemplul 12:
char a[10], b[10];
cin.get(a,10);
cin.get(b,10);
//dac introducem textul info arena i tastm Enter se memoreaz
n variabila a irul info aren i n variabila b irul a;

17

Citirea i scrierea irurilor de caractere


Scrierea irurilor de caractere
Scrierea se face folosind instruciunea cout n dou moduri:
- la nivel de caracter;
- la nivelul irului de caractere.
a. Scrierea la nivel de caracter (caracter cu caracter)
cin>>sir;
i=0;
while(sir[i]!=NULL)
{
cout<<sir[i];
i++;
}

18

Citirea i scrierea irurilor de caractere


b. Scrierea la nivelul irului de caractere
cout<<sir;

19

Citirea i scrierea irurilor de caractere


Exemplul 1:
char s1[10];
cin>>s1;
cout<<s1;
//dac introducem textul informat i tastm Enter se afieaz irul
informat;
Exemplul 2:
char s2[10];
cin>>s2;
cout<<s2+2;
//dac introducem textul informat i tastm Enter se afieaz irul
format;
Exemplul 3:
char s3[10];
cin>>s3;
cout<<s3;
//dac introducem textul info arena i tastm Enter se afieaz irul
info;
20

5. Prelucrarea irurilor de caractere


Funcii care lucreaz cu iruri de caractere
1.
2.
3.
4.
5.
6.
7.
8.
9.

STRLEN
STRCPY
STRNCPY
STRCAT
STRNCAT
STRCMP
STRNCMP
STRICMP
STRSET

10.STRNSET
11.STRLWR
12.STRUPR
13.TOUPPER
14.TOLOWER
15.STRCHR
16.STRRCHR
17.STRSTR
18.STRREV

21

Prelucrarea irurilor de caractere


1. Funcia STRLEN
Returneaz lungimea irului.
strlen(sir)
unde sir este o variabil de tip ir de caractere.
Exemplu:
char s[21];
int n;
cin>>s;
n=strlen(s);
cout<<n;
Dac se citete n variabila s irul informatica se afieaz valoarea 11.
Care este efectul apelului: cout<<strlen("programare"); ?

22

Prelucrarea irurilor de caractere


2. Funcia STRCPY
Copie un ir de caractere n alt ir de caractere.
strcpy(sir1,sir2)
unde sir1 i sir2 sunt dou variabile de tip ir de caractere.
Exemplu:
char a[21],b[21];
cin>>a;
strcpy(b,a);
cout<<b;
Dac se citete n variabila a irul informatica se afieaz irul
informatica.
Care este efectul apelului: strcpy(b,a+2); ?

23

Prelucrarea irurilor de caractere


3. Funcia STRNCPY
Copie un numr de caractere specificat, dintr-un ir de caractere n alt ir
de caractere.
strncpy(sir1,sir2,nr)
unde sir1 i sir2 sunt dou variabile de tip ir de caractere, iar nr
este o variabil de tip ntreg.
Observaie: dac strlen(sir2)<nr, atunci sir1 se completeaz automat cu caracterul
NULL; n caz contrar sir1 nu se va termina cu caracterul NULL, acesta trebuind s fie
adugat de ctre utilizator.

Exemplu:
char a[21],b[21];
cin>>a;
strncpy(b,a,4);
b[4]=NULL;
cout<<b;
Dac se citete n variabila a irul informatica se afieaz irul info.

Care este efectul apelului: strncpy(b,a+7,3); ?


24

Prelucrarea irurilor de caractere


4. Funcia STRCAT
Concateneaz dou iruri de caractere.
strcat(sir1,sir2)
unde sir1 i sir2 sunt dou variabile de tip ir de caractere.
Exemplu:
char a[21],b[21];
cin>>a>>b;
strcat(a,b);
cout<<a;
Dac se citete n variabila a irul info i n variabila b irul arena
afieaz irul infoarena.
Care este efectul apelurilor: strcat(a," ");
strcat(a,b); ?

25

se

Prelucrarea irurilor de caractere


5. Funcia STRNCAT
Concateneaz dou iruri de caractere.
strncat(sir1,sir2,nr)
unde sir1 i sir2 sunt dou variabile de tip ir de caractere, iar nr
este o variabil de tip ntreg.
Exemplu:
char a[21],b[21];
cin>>a>>b;
strncat(a,b,3);
cout<<a;
Dac se citete n variabila a irul info i n variabila b irul arena
afieaz irul infoare.
Care este efectul apelului: strncat(a,b+0,3); ?

26

se

Prelucrarea irurilor de caractere


6. Funcia STRCMP
Compar dou iruri de caractere.
strcmp(sir1,sir2)
unde sir1 i sir2 sunt dou variabile de tip ir de caractere.
o valoare negativ, dac sir1<sir2
strcmp(sir1,sir2)=
zero, dac sir1=sir2
o valoare pozitiv, dac sir1>sir2

Exemplu:
char a[21],b[21];
cin>>a>>b;
cout<<strcmp(a,b);
Dac se citete n variabila a irul info i n variabila b irul intro
afieaz valoarea -1.
Care este efectul apelului: cout<<strcmp("intro",a);?
27

se

Prelucrarea irurilor de caractere


7. Funcia STRNCMP
Compar un numr de caractere specificat din dou iruri de caractere.
strncmp(sir1,sir2,nr)
unde sir1 i sir2 sunt dou variabile de tip ir de caractere, iar nr
este o variabil de tip ntreg.
Exemplu:
char a[21],b[21];
cin>>a>>b;
cout<<strncmp(a,b,3);
Dac se citete n variabila a irul info i n variabila b irul intro
afieaz valoarea -14.
Care este efectul apelului: cout<<strncmp(a,"intro",2);?

28

se

Prelucrarea irurilor de caractere


8. Funcia STRICMP
Compar dou iruri de caractere fr a face diferena ntre litere mici i
litere mari.

stricmp(sir1,sir2)
unde sir1 i sir2 sunt dou variabile de tip ir de caractere.
Exemplu:
char a[21],b[21];
cin>>a>>b;
cout<<stricmp(a,b);
Dac se citete n variabila a irul arena i n variabila b irul ARE se
afieaz valoarea 1.
Care este efectul apelului: cout<<stricmp("Are","are");?

29

Prelucrarea irurilor de caractere


9. Funcia STRSET
Iniializeaz un ir de caractere cu acelai caracter.
strset(sir,ch)
unde sir este o variabil de tip ir de caractere, iar ch este o variabil
de tip caracter.
Exemplu:
char a[21],x;
cin>>a>>x;
strset(a,x);
cout<<a;
Dac se citete n variabila a irul info i n variabila x caracterul 1 se
afieaz irul 1111.
Care este efectul apelului: strset(a,'#'); ?

30

Prelucrarea irurilor de caractere


10. Funcia STRNSET
Iniializeaz ntr-un ir de caractere, primele nr caractere, cu caracterul
ch.

strnset(sir,ch,nr)
unde sir este o variabil de tip ir de caractere, ch este o variabil de
tip caracter, iar nr este o variabil de tip ntreg.
Exemplu:
char a[21],x;
int n=2;
cin>>a>>x;
strnset(a,x,n);
cout<<a;
Dac se citete n variabila a irul info i n variabila x caracterul 1 se
afieaz irul 11fo.

Care este efectul apelului: strnset(a,'&',1); ?


31

Prelucrarea irurilor de caractere


11. Funcia STRLWR
Transform literele mari n litere mici.
strlwr(sir)
unde sir este o variabil de tip ir de caractere.
Exemplu:
char a[21];
cin>>a;
strlwr(a);
cout<<a;
Dac se citete n variabila a irul iNFo se afieaz irul info.
Care este efectul apelului: strlwr("Arena"); ?

32

Prelucrarea irurilor de caractere


12. Funcia STRUPR
Transform literele mici n litere mari.
strupr(sir)
unde sir este o variabil de tip ir de caractere.
Exemplu:
char a[21];
cin>>a;
strupr(a);
cout<<a;
Dac se citete n variabila a irul info se afieaz irul INFO.
Care este efectul apelului: strupr("ARENA"); ?

33

Prelucrarea irurilor de caractere


13. Funcia TOLOWER
Transform o liter mare n liter mic.

tolower(ch)
unde ch este o variabil de tip caracter.
Exemplu:
char c;
cin>>c;
c=tolower(c);
cout<<c;

Dac se citete n variabila c caracterul N se afieaz caracterul n.


Care este efectul apelului: c=tolower('A');cout<<c; ?

34

Prelucrarea irurilor de caractere


14. Funcia TOUPPER
Transform o liter mic n liter mare.
toupper(ch)
unde ch este o variabil de tip caracter.
Exemplu:
char c;
cin>>c;
c=toupper(c);
cout<<c;
Dac se citete n variabila c caracterul b se afieaz caracterul B.
Care este efectul apelului: c=toupper('h');cout<<c; ?

35

Prelucrarea irurilor de caractere


15. Funcia STRCHR
Caut prima apariie a ununi caracter ntr-un ir de caractere.
strchr(sir,ch)
unde sir este o variabil de tip sir de caractere, iar ch este o variabil
de tip caracter.
Exemplu:
char a[21],c;
cin>>a>>c;
cout<<strchr(a,c);
Dac se citete n variabila a irul info i n variabila c caracterul f se
afieaz irul fo.
Care este efectul apelului: cout<<strchr("arena",'a'); ?

36

Prelucrarea irurilor de caractere


16. Funcia STRRCHR
Caut ultima apariie a ununi caracter ntr-un ir de caractere.
strrchr(sir,ch)
unde sir este o variabil de tip sir de caractere, iar ch este o variabil
de tip caracter.
Exemplu:
char a[21],c;
cin>>a>>c;
cout<<strrchr(a,c);
Dac se citete n variabila a irul informatica i n variabila c
caracterul i se afieaz irul ica.
Care este efectul apelului: cout<<strrchr("info",'f'); ?

37

Prelucrarea irurilor de caractere


17. Funcia STRSTR
Caut un subir ntr-un ir de caractere.
strstr(sir1,sir2)
unde sir1 i sir2 sunt dou variabile de tip ir de caractere.
Exemplu:
char a[21],b[21];
cin>>a>>b;
cout<<strstr(a,b);
Dac se citete n variabila a irul informatica i n variabila b irul fo
se afieaz irul formatica.
Care este efectul apelului: cout<<strstr("arena","a"); ?

38

Prelucrarea irurilor de caractere


18. Funcia STRREV
Inverseaz ordinea caracterelor ntr-un ir de caractere.
strrev(sir)
unde sir este o variabill de tip ir de caractere.
Exemplu:
char a[21];
cin>>a;
strrev(a);
cout<<a;
Dac se citete n variabila a irul info se afieaz irul ofni.
Care este efectul apelului: strrev("123321"); ?

39

6. Aplicaii
Fie de lucru
ntrebri iruri de caractere
Aplicaii iruri de caractere

40

7. Bibliografie i webografie
1. Miloescu M., Informatic. Manual pentru clasa a X-a, Editura
Didactic i Pedagogic, Bucureti, 2005
2. Munteanu F., Programarea calculatoarelor. Manual pentru licee de
informatic clasele X-XII, Editura Didactic i Pedagogic, Bucureti,
1994
3. Logoftu D., Bazele programrii n C++, Editura Polirom, Iai, 2006
4. Popescu C., Culegere de probleme de informatic, Editura DonarisInfo, Sibiu, 2002
5. Ministerul Educaiei, Cercetrii i Tineretului, Centrul Naional pentru
Curriculum i Evaluare n nvmntul Preuniversitar, Proba scris la
informatic. Examenul de bacalaureat Variante (1-100) , Bucureti
2008
6. http://www.tutorialeprogramare.ro/Tutorial%20C/Siruri%20de%20
caractere.html
7. http://ro.wikipedia.org/wiki/Strlen
8. http://en.wikipedia.org/wiki/C_string_handling

41