Documente Academic
Documente Profesional
Documente Cultură
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
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.
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
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
#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; }
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.
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.
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.
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.
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;
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).
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.
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.
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.
Ea convertete toate literele mari (A Z) n litere mici (a z). Restul caracterelor rmn neschimbate. Funcia ntoarce adresa 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.
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.
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)
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.
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.
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.
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);
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.
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.
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);