Sunteți pe pagina 1din 66

Tipuri

structurate
de date

i rur i

de

carac t ere

Sumar
1. Competene . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2. Prezentare general . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
3. Declararea irurilor de caractere . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
4. Citirea i scrierea irurilor de caractere . . . . . . . . . . . . . . . . . . . . . . . 14
5. Prelucrarea irurilor de caractere . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
6. Aplicaii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
7. Bibliografie i webografie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

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
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.

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.

Exemplu
irul de caractere Limbajul C++ se poate reprezenta astfel:

\0

10

11

12

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.

Prezentare general
Exemplu
char c1,c2;
int x;
c1='A';
x=c1+32;
//conversie implicit
c2=x;
//conversie implicit
cout<<c1<<endl<<c2<<endl<<x;

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];
sau
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);

Declararea irurilor de caractere


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

Declararea irurilor de caractere


Exemplu 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

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);
10

Declararea irurilor de caractere


Exemplu 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

11

Declararea irurilor de caractere


Exemplu 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

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;

12

Declararea irurilor de caractere


Exemplu 4
char s[]={'a','e','i','o','u'};
s[5]=NULL;
- se declar un ir de caractere care memoreaz vocalele litere mici;
- irul de caractere a a fost iniializat la declararea lui, iar reprezentarea n
memoria intern este urmtoarea:
a

\0

- utilizatorul trebuie s plaseze la sfritul irului indicatorul de sfrit de ir;

13

4. Citirea i scrierea irurilor de caractere


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.

14

Citirea i scrierea irurilor 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[n]=NULL;
- dac citirea irului de caractere se face caracter cu caracter trebuie
adugat caracterul NULL la sfritul irului de caractere.

15

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.

16

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.

17

Citirea i scrierea irurilor de caractere


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.

18

Citirea i scrierea irurilor de caractere


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

19

Citirea i scrierea irurilor de caractere


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

20

Citirea i scrierea irurilor de caractere


Exemplu 7
char s7[10];
cin.get(s7,10,'$');
//dac introducem textul informat$ i tastm Enter se memoreaz n
variabila s7 irul informat;
Exemplu 8
char s8[10];
cin.get(s8,10);
//dac introducem textul info$arena i tastm Enter se memoreaz
n variabila s8 irul info$aren;
Exemplu 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;

21

Citirea i scrierea irurilor de caractere


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

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

22

Citirea i scrierea irurilor de caractere


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

23

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.

24

Citirea i scrierea irurilor de caractere


a. Scrierea la nivel de caracter (caracter cu caracter)
cin>>sir;
i=0;
while(sir[i]!=NULL)
{
cout<<sir[i];
i++;
}

25

Citirea i scrierea irurilor de caractere


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

26

Citirea i scrierea irurilor de caractere


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

5. Prelucrarea irurilor de caractere


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

28

Prelucrarea irurilor de caractere


1. Funcia STRLEN
Efect:
Returneaz lungimea irului de caractere.
Sintaxa:
strlen(sir)
unde sir este o variabil de tip ir de caractere.

29

Prelucrarea irurilor 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.


Exerciiu
Care este efectul apelului:
cout<<strlen("programare"); ?

30

Prelucrarea irurilor de caractere


2. Funcia STRCPY
Efect:
Copie un ir de caractere n alt ir de caractere.
Sintaxa:
strcpy(sir1,sir2)
unde sir1 i sir2 sunt dou variabile de tip ir de caractere.

31

Prelucrarea irurilor 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.
Exerciiu
Care este efectul apelului:
strcpy(b,a+2); ?

32

Prelucrarea irurilor de caractere


3. Funcia STRNCPY

Efect:
Copie un numr de caractere specificat, dintr-un ir de caractere n alt
ir de caractere.
Sintaxa:
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.

33

Prelucrarea irurilor de caractere


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.
Exerciiu
Care este efectul apelului:
strncpy(b,a+7,3); ?

34

Prelucrarea irurilor de caractere


4. Funcia STRCAT
Efect:
Concateneaz dou iruri de caractere.
Sintaxa:
strcat(sir1,sir2)
unde sir1 i sir2 sunt dou variabile de tip ir de caractere.

35

Prelucrarea irurilor 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.
Exerciiu
Care este efectul apelurilor:
strcat(a," ");
strcat(a,b); ?

36

se

Prelucrarea irurilor de caractere


5. Funcia STRNCAT
Efect:
Concateneaz la un ir de caractere un numr de caractere specificat
din alt ir de caractere.
Sintaxa:
strncat(sir1,sir2,nr)
unde sir1 i sir2 sunt dou variabile de tip ir de caractere, iar nr
este o variabil de tip ntreg.

37

Prelucrarea irurilor de caractere


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.
Exerciiu
Care este efectul apelului:
strncat(a,b+0,3); ?

38

se

Prelucrarea irurilor de caractere


6. Funcia STRCMP
Efect:
Compar dou iruri de caractere.
Sintaxa:
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

39

Prelucrarea irurilor de caractere


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.
Exerciiu
Care este efectul apelului:
cout<<strcmp("intro",a);?

40

se

Prelucrarea irurilor de caractere


7. Funcia STRNCMP
Efect:
Compar un numr de caractere specificat din dou iruri de caractere.
Sintaxa:
strncmp(sir1,sir2,nr)
unde sir1 i sir2 sunt dou variabile de tip ir de caractere, iar nr
este o variabil de tip ntreg.

41

Prelucrarea irurilor de caractere


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.
Exerciiu
Care este efectul apelului:
cout<<strncmp(a,"intro",2);?

42

se

Prelucrarea irurilor de caractere


8. Funcia STRICMP
Efect:
Compar dou iruri de caractere fr a face diferena ntre litere mici i
litere mari.
Sintaxa:
stricmp(sir1,sir2)
unde sir1 i sir2 sunt dou variabile de tip ir de caractere.

43

Prelucrarea irurilor 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.
Exerciiu
Care este efectul apelului:
cout<<stricmp("Are","are");?

44

Prelucrarea irurilor de caractere


9. Funcia STRSET
Efect:
Iniializeaz un ir de caractere cu acelai caracter.
Sintaxa:
strset(sir,ch)
unde sir este o variabil de tip ir de caractere, iar ch este o variabil
de tip caracter.

45

Prelucrarea irurilor de caractere


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.
Exerciiu
Care este efectul apelului:
strset(#*#*,'#'); ?

46

Prelucrarea irurilor de caractere


10. Funcia STRNSET
Efect:
Iniializeaz ntr-un ir de caractere, primele nr caractere, cu caracterul
ch.
Sintaxa:
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.

47

Prelucrarea irurilor de caractere


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.
Exerciiu
Care este efectul apelului:
strnset(a,'&',1); ?

48

Prelucrarea irurilor de caractere


11. Funcia STRLWR
Efect:
Transform literele mari n litere mici.
Sintaxa:
strlwr(sir)
unde sir este o variabil de tip ir de caractere.

49

Prelucrarea irurilor de caractere


Exemplu
char a[21];
cin>>a;
strlwr(a);
cout<<a;
Dac se citete n variabila a irul iNFo se afieaz irul info.
Exerciiu
Care este efectul apelului:
strlwr("Arena"); ?

50

Prelucrarea irurilor de caractere


12. Funcia STRUPR
Efect:
Transform literele mici n litere mari.
Sintaxa:
strupr(sir)
unde sir este o variabil de tip ir de caractere.

51

Prelucrarea irurilor de caractere


Exemplu
char a[21];
cin>>a;
strupr(a);
cout<<a;
Dac se citete n variabila a irul info se afieaz irul INFO.
Exerciiu
Care este efectul apelului:
strupr("ARENA"); ?

52

Prelucrarea irurilor de caractere


13. Funcia TOLOWER

Efect:
Transform o liter mare n liter mic.
Sintaxa:
tolower(ch)
unde ch este o variabil de tip caracter.

53

Prelucrarea irurilor de caractere


Exemplu
char c;
cin>>c;
c=tolower(c);
cout<<c;

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


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

54

Prelucrarea irurilor de caractere


14. Funcia TOUPPER
Efect:
Transform o liter mic n liter mare.
Sintaxa:
toupper(ch)
unde ch este o variabil de tip caracter.

55

Prelucrarea irurilor de caractere


Exemplu
char c;
cin>>c;
c=toupper(c);
cout<<c;
Dac se citete n variabila c caracterul b se afieaz caracterul B.
Exerciiu
Care este efectul apelului:
c=toupper('h');
cout<<c; ?

56

Prelucrarea irurilor de caractere


15. Funcia STRCHR
Efect:
Caut prima apariie a ununi caracter ntr-un ir de caractere.
Sintaxa:
strchr(sir,ch)
unde sir este o variabil de tip sir de caractere, iar ch este o variabil
de tip caracter.

57

Prelucrarea irurilor de caractere


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.
Exerciiu
Care este efectul apelului:
cout<<strchr("arena",'a'); ?

58

Prelucrarea irurilor de caractere


16. Funcia STRRCHR
Efect:
Caut ultima apariie a ununi caracter ntr-un ir de caractere.
Sintaxa:
strrchr(sir,ch)
unde sir este o variabil de tip sir de caractere, iar ch este o variabil
de tip caracter.

59

Prelucrarea irurilor de caractere


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.
Exerciiu
Care este efectul apelului:
cout<<strrchr("info",'f'); ?

60

Prelucrarea irurilor de caractere


17. Funcia STRSTR
Efect:
Caut un subir de caractere ntr-un ir de caractere.
Sintaxa:
strstr(sir1,sir2)
unde sir1 i sir2 sunt dou variabile de tip ir de caractere.

61

Prelucrarea irurilor 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.
Exerciiu
Care este efectul apelului:
cout<<strstr("arena","a"); ?

62

Prelucrarea irurilor de caractere


18. Funcia STRREV
Efect:
Inverseaz ordinea caracterelor ntr-un ir de caractere.
Sintaxa:
strrev(sir)
unde sir este o variabill de tip ir de caractere.

63

Prelucrarea irurilor de caractere


Exemplu
char a[21];
cin>>a;
strrev(a);
cout<<a;
Dac se citete n variabila a irul info se afieaz irul ofni.
Exerciiu
Care este efectul apelului:
strrev("123321"); ?

64

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

65

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

66