Sunteți pe pagina 1din 48

IRURI DE CARACTERE

N C++

Prof. ADINA-ELENA PIIGOI

Generaliti
Vectorii de caractere pot fi iniializai la
declarare, caracterul nul fiind memorat
automat.
char vect[11]=calculator
char vect[]=calculator
char vect[100]=calculator

Citirea i scrierea irurilor de


caractere
#include<iostream.h>
main()
{ char a[20];
int i;
for(i=0;i<10;i++) cin>>a[i];
a[10]=0;
for(i=0; i<10; i++) cout<<a[i];
}

#include<iostream.h>
main()
{ char a[20];
cin>>a;
cout<<a;
}

Citirea i scrierea irurilor de


caractere
Caracterul nul este adugat automat
Putem citi orice cuvnt cu un numr de

pn la 19 caractere excluznd
caracterul nul.
Putem s rezervm, n limita memoriei pe
care o are la dispoziie programul, un
numr mai mare de octei.
Un vector poate fi adresat pe componente

Se sar caracterele albe.


Se citete irul care ncepe cu primul

caracter care nu este alb i se sfrete la


ntlnirea primului caracter alb.
Pentru citirea irurilor de caractere vom
utiliza o funcie de un tip special, i
anume:
cin.get(vector_de_caractere, int nr, char=\n)

Funcia
cin.get(vector_de_caractere, int nr, char=\n)

citete un ir de caractere pn cnd este


ndeplinit una dintre condiiile de mai jos:
au fost citite nr-1 caractere;
a fost ntlnit caracterul transmis ca ultim
parametru (implicit \n).

Observaii
Sunt citite i caractere albe.
Este inserat caracterul nul.
Caracterul transmis ca ultim

parametru nu

este inserat n ir.


Al treilea parametru este trecut n mod
facultativ.

Care este efectul n ce dou


exemple?
char a[10]
cin.get(a,3)
cout<<a;

char a[10]
cin.get(a,10,g)
cout<<a;

n C++ pot exista mai multe funcii cu


acelai nume, dar care difer prin
parametrii primii.
Funcia
cin.get()
fr parametri are rolul de a citi un caracter
(fie c este alb, fie c nu)

Tipul char*
Limbajul C++ permite
ca un vector de
caractere
s
fie
adresat ncepnd de
la un anumit octet al
su.

#include<iostream.h>
main()
{ char a[]=casa;
cout<<a+1<< <<a+2<< ;
cout<<a+3;
}

Tipul char*

cnd scriem a, adresm


vectorul ncepnd cu
primul octet
cnd
scriem
a+1,
adresm
vectorul
ncepnd cu al doilea
octet
cnd
scriem
a+2,
adresm
vectorul
ncepnd cu al treilea
octet

#include<iostream.h>
main()
{ char a[]=casa;
cout<<a+1<< <<a+2<< ;
cout<<a+3;
}

Tipul char*
Vectorii astfel adresai pot fi
accesai aa cum suntem
deja obinuii.
(a+1)[0] reine caracterul a
(a+1)[1] reine caracterul s

#include<iostream.h>
main()
{ char a[]=casa;
cout<<a+1<< <<a+2<< ;
cout<<a+3;
}

Tipul char*
Tipul expresiilor

a-1, a-2 este de tip char*,


adic sunt adrese.
Numrul de ordine al unui octet n
memoria intern se numete adresa
octetului respectiv.
Adresa unui vector de caractere este
adresa primului su octet.

Tipul char*
O variabil de tip

char* poate reine


adresa unui vector de caractere.
n C++, numele unui vector de caractere
este o adres constant de vector i poate
fi atribuit unei variabile de tip char*.

Tipul char*
a

este un vector de
caractere
p este o variabil de
tip char*.

#include<iostream.h>
main()
{ char a[]=Exemplu, *p;
p=a; cout<<p<<endl;
p++; cout<<p<<endl;
p++; cout<<p<<endl;
cout<<p[1]<<endl;
cout<<p-a;
}

Lungimea unui ir de caractere


Funcia strlen are rolul de a returna
lungimea efectiv a unui ir:
size_t strlen(char* a)
unde:
size_t este un tip ntreg, utilizat n
adresarea memoriei, definit n string.h
argumentul este de tip char*(adic o
adres ctre un ir).

Copierea i concatenarea irurilor


de caractere
Funcia

strcpy are forma general

char *strcpy(char* dest, char* sursa);


i are rolul de a copia irul de adres
sursa la adresa dest. Copierea se termin
dup ce a fost copiat caracterul nul. Se
returneaz adresa dest.

Copierea i concatenarea irurilor


de caractere

Funcia strcat are forma general


char *strcat(char* dest, char* sursa);
i are rolul de a aduga irului de adres dest
irul de adres sursa. irul de adres sursa
rmne nemodificat. Aceast operaie se
numete concatenare i nu este comutativ.
Rezultatul este adresa irului sursa, iar irul va
avea ca lungime suma lungimilor celor dou
iruri care au fost concatenate.

Copierea i concatenarea irurilor


de caractere

Funcia strncat are forma general

char *strncat(char* dest, const char* sursa, size_t nr);

i are rolul ca strcat cu deosebirea c adaug


irului destinaie primii nr octei ai irului sursa.
Adugarea caracterelor se face naintea
caracterului nul. Funcia returneaz adresa de
nceput a irului destinaie.

Cutarea unui caracter ntr-un ir

Funcia strchr are forma general


char* strchr(char* s, int c);
i are rolul de a cuta caracterul c n irul s.
Cutarea se face de la stnga la dreapta. n
cazul n care caracterul este gsit, funcia
ntoarce adresa subirului care ncepe cu prima
apariie a caracterului citit i se termin cu
caracterul nul al irului n care se face cutarea.
Altfel, ntoarce o expresie de tip char* cu
valoarea 0 (adic o adres vid de ir).

Compararea irurilor
Funcia

strcmp are forma general


int strcmp( const char* s1, const char* s2);
i are rolul de a compara dou iruri de
caractere. Valoarea returnat este:
<0, dac s1<s2
=0, dac s1 = s2
>0, dac s1 > s2

Compararea irurilor
Funcia

strcmp face distincie ntre


literele mari i mici ale alfabetului .
Funcia stricmp are forma general
int stricmp( const char* s1, const char* s2);
i are rol ca strcmp. Diferena este c nu
face distincie ntre literele mari i mici .

Vectori de cuvinte
Prin cuvnt se nelege o succesiune de caractere
care nu sunt albe.
Vectorii de cuvinte sunt matrice cu elemente de
baz de tip char.
char a[10][25]
Fiecare linie din cele 10 ale matricei poate reine
un ir de caractere. Acesta poate avea cel mult
25 de caractere (inclusiv caracterul nul).
Cuvintele pot fi adresate prin a[0], a[1],

Subiruri

Funcia strstr are forma general


char *strstr( const char* s1, const char* s2);
i are rolul de a identifica dac irul s2 este
subir (caractere succesive) al irului s1. Dac
acesta este identificat, funcia returneaz adresa
de nceput n cadrul irului s1, altfel returneaz
adresa nul (0). Cutarea se face de la stnga
la dreapta. n cazul n care s2 apare de mai
multe ori n cadrul lui s1, se returneaz adresa
de nceput a primei apariii.

Alte funcii utile n prelucrarea


irurilor
Funcia

strtok are forma general


char *strtok(char* s1, const char* s2);
Principiul de executare este urmtorul:
irul s1 este considerat ca fiind alctuit din
0,1,n entiti separate prin unul sau mai
multe caractere cu rol de separator, iar
irul s2 ca fiind alctuit din unul sau mai
multe caractere cu rol de separator;

Alte funcii utile n prelucrarea


irurilor

La prima apelare care trebuie s fie de


forma
strtok(s1,s2);
funcia ntoarce adresa primului caracter al
primei entiti. Dup prima entitate
separatorul este nlocuit automat prin
caracterul nul (cod 0).

Alte funcii utile n prelucrarea


irurilor
Urmtoarele apeluri ale funciei sunt de
forma
strtok(NULL, s2);
iar funcia ntoarce de fiecare dat adresa
primului caracter al urmtoarei entiti i,
dup ea, este adugat caracterul nul.
n momentul n care irul rmas nu mai
conine entiti, funcia ntoarce adresa
nul.

Alte funcii utile n prelucrarea


irurilor
Funcia

strspn are forma general

size_t strspn(char* s1, char* s2);

i are rolul de a returna numrul de


caractere al irului s1 caractere
consecutive care ncep obligatoriu cu
primul caracter care se gsesc n irul
s2.

Alte funcii utile n prelucrarea


irurilor
Funcia

strcspn are forma general

size_t strcspn( const char* s1, const char* s2);

i are rolul de a returna numrul de


caractere al irului s1 caractere
consecutive care ncep obligatoriu cu
primul caracter care nu se gsesc n
irul s2.

Alte funcii utile n prelucrarea


irurilor
Funcia

strlwr are forma general


char * strlwr(char* s);

Ea convertete toate literele mari


(A Z) n litere mici (a z). Restul
caracterelor rmn neschimbate. Funcia
ntoarce adresa s.

Alte funcii utile n prelucrarea


irurilor
Funcia

strupr are forma general


char * strupr(char* s);

i are rolul de a converti toate literele mici


(a z) n litere mari (A Z). Restul
caracterelor rmn neschimbate. Funcia
ntoarce adresa s.

Alte funcii utile n prelucrarea


irurilor
Funcia

strpbrk are forma general

char * strbrk(char* s1, char* s2);

acioneaz n felul urmtor:


Caut primul caracter al irului s1 n s2.
Dac este gsit, returneaz adresa sa n
cadrul irului s1 i execuia se termin,
altfel trece la pasul urmtor.

Funcia strpbrk
Caut al doilea caracter al irului s1 n s2.
Dac este gsit, returneaz adresa sa din
cadrul irului s1 i execuia se termin,
altfel trece la pasul urmtor.
Dac nici un caracter al irului s1 nu
aparine irului s2, funcia returneaz
adresa nul.

Citirea i scrierea irurilor de


caractere din i n fiiere text
Operaia
de
citire
Pentru a citi o linie a unui fiier text, se
poate folosi funcia urmtoare:

getline(char* adresa_sir, int nr_char, char=\n)


Funcia citete un ir de caractere, pn cnd una
dintre condiiile urmtoare este ndeplinit:
a) au fost citite nr_char-1 caractere;
b) A fost detectat sfritul de linie \n

Operaia de citire

Prin f>>linie_citita, citirea se efectueaz


astfel:

a)

ncepnd cu poziia curent a pointerului se


sar toate caracterele albe;
se citesc toate caracterele pn la ntlnirea
unui caracter alb.

b)

Operaia de citire

Caracterul care marcheaz sfritul liniei \n nu


este inserat n ir, n schimb este inserat
caracterul nul.
Este suficient s apelm funcia cu primii doi
parametrii, ultimul fiind implicit.
Ultimul parametru poate fi apelat explicit cu o
valoare convenabil, caz n care citirea se face
pn la ntlnirea ei sau pn cnd au fost
citite nr_car-1 caractere.

Citirea i scrierea irurilor de


caractere din i n fiiere text
Operaia de scriere
Scrierea se face prin comanda
f<<sir;
Prin aceast instruciune se scrie ntreg
irul, ncepnd cu poziia curent a
pointerului, inclusiv caracterele albe .

Conversia irurilor n valori


numerice i invers
Funciile utilizate pentru conversia valorilor
numerice n ir i invers au prototipul
stdlib.h.
Funcia atof convertete un ir ctre tipul
double.
double atof(const char *s)
Dac conversia eueaz (se ntlnete un caracter
nenumeric) valoarea ntoars este 0. Dac primele
caractere ale irului sunt albe, acestea sunt ignorate.

Conversia irurilor n valori


numerice i invers
Funcia

atold convertete un ir ctre tipul


long double:
long double atold(const char *s);
Funcia atoi convertete un ir ctre tipul
int:
int atoi(const char *s);
Funcia atol convertete un ir ctre tipul
long:
long atol(const char *s);
Dac conversia eueaz (se ntlnete un caracter nenumeric)
valoarea ntoars este 0. Dac primele caractere ale irului
sunt albe, acestea sunt ignorate.

Conversia irurilor n valori


numerice i invers

Funcia

ecvt are rolul de a converti o valoare


de tip double ctre un ir. Caracterul nul este
adugat automat irului obinut. Forma
general este:

char* ecvt(double valoare, int poz, int* zec, int* semn);


unde:
valoare valoarea de convertit;
poz numrul de poziii pe care trebuie s le ocupe
irul n urma conversiei;

Funcia ecvt
char* ecvt(double valoare, int poz, int* zec, int* semn);
unde:
zec adresa unei variabile, de tip int, care reine,
dup apel, numrul zecimalelor pe care le are
numrul;
semn - adresa unei variabile, de tip int, care are rolul
de a memora, dup apel, 1, dac numrul este
negativ, sau 0, n caz contrar.

Funcia ecvt
Dac a este o variabil,

&a este adresa ei.


Variabila zec reine dup apel numrul
ntregilor, iar variabila semn semnul
rezultatului.
Funcia nu insereaz n ir nici punctul
zecimal, nici semnul numrului.
irul obinut ncepe cu cifra cea mai
semnificativ a numrului.

Funcia ecvt
Dac numrul poziiilor ocupate de ir

(poz) este mai mare dect ocup data,


irul este completat n stnga cu un numr
de 0 necesar.
n cazul n care numrul poziiilor este mai
mic dect cel ocupat de numr, rezultatul
este rotunjit.

Conversia irurilor n valori


numerice i invers

Funcia

itoa are rolul de a converti o valoare


de tip int ntr-un ir, a crui adres este
memorat n variabila ir. Valoarea baza reine
baza de numeraie ctre care s se fac
conversia. n cazul bazei 10, irul obinut
reine i, eventual, semnul -. Funcia ntoarce
adresa irului obinut.
char* itoa(int valoare, char * sir, int baza);

Conversia irurilor n valori


numerice i invers

Funcia

ltoa are acelai efect ca itoa,


deosebirea fiind dat de faptul c se
convertete ctre ir o valoare de tip long int.
char* ltoa(long valoare, char * sir, int baza);

Funcia

ultoa are acelai efect ca itoa,


deosebirea fiind dat de faptul c se
convertete ctre ir o valoare de tip
unsigned long.

char* ultoa(unsegned long valoare, char * sir, int baza);

Conversia irurilor n valori


numerice i invers
Funcia

long strtol(const char *s, char **endptr, int baza);

are rolul de a converti un ir ctre long. n


afara irului care trebuie convertit, funcia
primete ca parametru de intrare adresa
unei variabile de tip char*. Dup apel,
aceast variabil va reine poziia
primului caracter din ir care nu poate fi
convertit.

Conversia irurilor n valori


numerice i invers

Funcia

double strtod(const char *s, char **endptr);


convertete un ir ctre double.
Funcia

long double_strtold(const char *s, char **endptr);


convertete un ir ctre long double.
Funcia
unsigned long strtoul(const char *s, char **endptr, int baza);

convertete un ir ctre unsigned long.

Conversia irurilor n valori


numerice i invers
n caz de depire adic numrul nu
poate fi memorat deoarece este n afara
tipului funciile strtol, strtod, strtold i
strtoul returneaz cea mai mare sau cea
mai mic valoare care poate fi memorat
de tipul n care se face conversia, dup
cum valoarea este pozitiv sau negativ.

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