Sunteți pe pagina 1din 50

IRURI DE CARACTERE N C++

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


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
Caracterul

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

Functii care opereaza cu siruri de caractere


Funcia strlen are rolul de a returna lungimea efectiv a unui ir: Int 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 irurilor de caractere


Funcia

strcpy are forma general

char *strcpy(char *dest, char *sursa); i are rolul de a copia irul sursa in sirul dest. Copierea se termin dup ce a fost copiat caracterul nul. Se returneaz adresa dest.

Concatenarea irurilor de caractere


Funcia

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

Concatenarea irurilor de caractere

Funcia strncat are forma general

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

i acelasi rol 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).

Aplicatie

Scrieti programul C++ care citeste de la tastatura 2 siruri de caractere s1 si s2 si afiseaza: Lungimea sirului 1 si 2 Sirul obtinut prin concatenarea celor 2 siruri Sirul obtinut prin copierea primelor 3 caractere din sirul al 2- lea la primul sir citit Daca un caracter c citit de la tastatura se gaseste in sir

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

a)

Prin f>>linie_citita, citirea se efectueaz astfel:


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.