Sunteți pe pagina 1din 13

Siruri de caractere

Structura capitolului:


Tipul char

Prelucrare siruri de caractere

Functii predefinite

Vectori de cuvinte(siruri de
caractere)

Tipul pointer
TIPUL CHAR
Tipul char este un tip de
date simplu(o variabila
poate valora la un
moment dat o singura
valoare).
Multimea de valori: 256
de caractere ale codului
ASCII.
Un caracter este delimitat de apostrof ( 'a', 'A', '?', '!', '0').
Fiecare caracter are asociat un numar care reprezinta codul
ASCII al acestuia.


Intervale in care se incadreaza:

Char [-128...127]

Unsigned char[0...255]

Caracterele imprimabile au codul ASCII in intervalul [32,196].

Codul ASCII al caracterului c se obtine cu int(c).


Caracterul cu codul ASCII x se obtine cu char(c).

-un caracter se reprezinta la nivelul memoriei pe 1 octet


Operatii:
Citirea: cin>>c;
Afisarea: cout<<c;
Atribuire: c='A'; c=65; c1=c2;
Operatori de relationare: >, >=, <, <=, ==, !=
Operator aritmetic
-daca un caracter apare intr-o expresie aritmetica atunci el este inlocuit cu
codul sau ASCII

Transformari:
1.LITERA MARE-litera mica
c+32
c+'a'-'A'
tolower(c)
2.litera mica-LITERA MARE
c-32
c-'a'-'A'
toupper(c)
3.caracter cifra-cifra corespunzatoare
c-48
c-'0'
PRELUCRARE
SIRURI DE CARACTERE
-reprezinta un tip compus omogen(o variabila poate memora mai multe
valori de acelasi tip)
-un sir de caractere este delimitat de ghilimele
-un sir de caractere se memoreaza cu ajutorul unui vector cu elemente de
tip char

Declarare: char nume_sir[nr.max de caractere+1];

Observatie:
1. Indexarea incepe obligatoriu de la 0
2. Orice sir de caractere se termina obligatoriu cu caracterul cu codul
ASCII 0 (NULL)

Ex: char s[11] ; ///in variabila s se poate memora un sir cu maxim 10


caractere
Char voc[6]=”aeiou”; ///sir initializat cu precizarea lungimii
Char oper[]=”+-/%><”; ///sir initializat fara precizarea lungimii, aceasta
calculandu-se automat
Citirea: tot sirul


Daca sirul nu contine spatii: cin>>sir;
 Daca sirul contine spatii: cin.getline(sir, nrmaxcar+1);

Observatie:

-daca in program dupa o citire cu cin avem o citire cu cin.getline


intre cele doua citiri trebuie sa apelam functia cin.get();

Prelucrare la nivel de caractere:

for(i=0; s[i]!=0; i++)


*prel. caracterului s[i]

Biblioteca speciala: #include<cstring>


FUNCTII
PREDEFINITE
1. strlen(s)=functie operand care primeste ca parametru un sir de
caractere si returneaza lungimea acestuia

2. FUNCTII DE COPIERE

-strcpy(sir1, sir2)=functie procedurala care primeste ca parametru doua


siruri de caractere, toate caracterele sirului 2 se vor copia in caracterele sirului
sir1

-strncpy(sir1, sir2, n)=functie procedurala care va copia in sirul sir1 doar


primele n caractere ale sirului sir2
Observatie: functia a fost implementata gresit in sensul ca s-a uitat ca
dupa ultimul caracter al sirului sir1 sa se adauge caracterul NULL. Din acest
motiv, cand vom folosi functia strncpy vom completa noi pozitia n din sir1 cu
NULL:

strncpy(sir1, sir2, n);


sir1[n]=0;
3. FUNCTII DE CONCATENARE(lipire)

-strcat(sir1, sir2)=functie peocedurala care adauga dupa


ultimul caracter al sirului sir1 toate caracterele sirului sir2

-strncat(sir1, sir2, n)=functie procedurala care va adauga


dupa ultimul caracter al sirului sir1 primele n caractere al sirului
sir2

4. FUNCTII DE COMPARARE(in sens lexicografic)

-strcmp(sir1, sir2)==0 (sir1=sir2)


-strcmp(sir1, sir2)>0 (sir1>sir2)
-strcmp(sir1, sir2)<0 (sir1<sir2)

-strncmp(sir1, sir2, n)=la fel ca functia strcmp, numai ca


compara doar primele n caractere din cele doua siruri
VECTORI DE CUVINTE
Un vector de cuvinte este practic un vector normal, numai ca
in loc de numere, stocam cuvinte. Fiecare cuvant poate fi accesat
individual folosind indici, iar fiecare cuvant are un predecesor si un
succesor ( cu exceptia primului si ultimului cuvant).
Declarare: char numevector[nrmaxcuv][nrmaxcar+1];
Tipul pointer
Multimea de valori: adresa de memorie+constanta predefinita
NULL(0) cu semnificatia nicio adresa
-memoria este alcatuita dintr-o succesiune de octeti
1 octet(byte)-o succesiune de 8 biti( 1 bit poate fi 0 sau 1)

Multiplii octetului:
1KB=1024 octeti
1MB=1024 KB
1GB=1024 MB
1 TB=1024 GB
1PB=1024 TB

-fiecare octet poate asocia un nr care reprezinta adresa de


memorie a acestuia scris in baza 16
Declarare:
Tip *nume.var;
-tip reprezinta tipul valorii care este memorata la adresa
memorata de variabila de tip pointer

Orice data are urmatoarele caracteristici:


-nume
-tip
-valoare
-adresa de memorie: adresa primului octet alocat datei respective;
ea se poate obtine cu ajutorul operatorului de
referientere(adresare)&
Numar de octeti alocati: care se obtine cu ajutorul operatorului
sizeof(nume.var)

Citire: valorile variabilei de tip pointer NU SE POT CITI


Afisare: cout<<nume.var; //se va afisa un nr in baza 16
Operatori:
1. specifici
a. Operatorul de referientere(adresare) & care se aplica pentru date de
orice tip si returneaza adresa primului octet alocat variabilei respective
b. Operatorul de dereferentiere(*)
-se aplica DOAR variabilelor de tip pointer si returneaza valoarea stocata la
adresa memorata de variabila de tip pointer

2.operatorul de atribuire
-unei variabile de tip pointer i se poate atribui adresa unei variabile sau
valoarea unei variabile de tip pointer
Int main()
{ int a=10, *p;
p=&a;
cout<<a; //10
cout<<*p; //10

Dupa atribuirea p=&a; putem accesa valoarea variabilei a in doua moduri:


1. direct-prin intermediul variabilei a
2. indirect-prin intermediul variabilei de tip pointer p utilizand operatorul de
dereferientiere care returneaza valoarea stocata la o adresa *p
3. operatori relationari
-valorile a doi pointeri se pot compara pentru ca se compara adrese de
memorie, adica numere

4. operatori aritmetici
pointer+constanta
pointer-constanta
pointer1-pointer2

Tablourile si pointerii:
-adresa primului element a[0] este chiar a
Putem accesa valoarea primului element al vectorului a in doua moduri
-direct cu ajutorul operatorului de indexare[ ]
-indirect prin intermediul adresei acestuia *a
-adresa elementului a[i] este a+i

Stergerea caracterelor dintr-un sir


prin intermediul pointerilor

strcpy(aux,s+i+1);
strcpy(s+i, aux);

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