Sunteți pe pagina 1din 7

Siruri de caractere

I. Declararea unui sir de caractere.

char nume[nr];

Exemple:

char s[256];

sau :

char s[11] = "copil"; // se folosesc doar 6 caractere


char t[]="copil"; // se aloca automat 6 octeti pentru sirul t: cele 5 litere si caracterul nul \0
char x[6]={'c','o','p','i','l','\0'}; // initializarea este similara cu cea a unui tablou oarecare
- sirurile de caractere sunt tablouri (vectori)
char z[]={'c','o','p','i','l','\0'}; // se aloca automat 6 octeti pentru sir

In memoria interna sirul este stocat sub forma unui vector de caractere. Fiecare
element al sirului (incepand cu 0) retine codul ASCII al caracterului pe care il
memoreaza. Ultimul element al sirului este caracterului nul care este memorat
automat. Trebuie rezervate lungimea_sirului+1 caractere (+1 pentru caracterul
nul ‘\0’).
Limbajul C/C++ permite initializarea unui tablou de caractere printr-o constanta
sir, care include automat caracterul null odata cu declararea sirului:

char s[ ] = "informatica"; // compilatorul va determina spatiul necesar


II. Citirea unui sir de caractere

Pentru citirea sirului de caractere de la tastatura se utilizeaza functia cin sau


cin.getline din libraria <cstring> care trebuie inclusa la inceputul programului
Diferenta este ca daca vom folosi comanda deja cunoscuta cin atunci sirul de
caracatere va fi citit doar pana la primul caracter « spatiu » tastat, restul fiind
ignorat sau pana la tastarea tastei Enter.

In schimb, daca folosim comada cin.getline (name.strimg, lenght) sirul de


caractere va fi citit si memorat in variabila name.string pana la tastarea tastei
Enter, spatiile introduse vor fi considerate ca si caractere care fac parte din sirul
name.string.

Exemple

cout<<"Introduceti sirul:";

cin.getline (s,255);

Pentru a citi doua siruri de caractere se utilizeaza :

cin.getline(s1,15);

cin.getline(s2,10);

3. Afisarea sirurilor:
cout<<s;

cout<<s1<<"\n"<<s2;

Se poate utiliza si afisarea caracter cu caracter:

for ( i = 0; i < strlen (s); i++)

// aici se obtine automat prin functia strlen lungimea sirului sau numarul de
elemente ale siruui

cout<< s[i];
sau

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

// aici se parcurge sirul pana la elementul sfarsit de sir \0

cout<< s[i];

unde strlen ( ) este functia care determina lungimea sirului. Asa cum am scris
mai sus, sirul de caractere este memorat de fapt intr-un vector incepand cu
indicele (i=0) pana la indicele (i = strelen (s) -1).

III. FUNCTII ASUPRA SIRURILOR DE CARACTERE

Functiile pentru operatii cu siruri se gasesc in header-ul (libraria) cstring.

1. Functia strlen
int strlen(nume_sir); – returneaza lungimea efectiva a unui sir (fara a numara
terminatorul de sir \0 - NULL).

Exemplu:

char a[50]=”ora de informatica”; - strlen(a) = 18

2.a Functia strcpy


strcpy(sir_destinatie,sir_sursa); – copiaza sirul sir_ sursa in sir_destinatie

Exemplu:

char a[50]=”primul sir”,b[40]=”al doilea sir”;

a=b; //eroare

strcpy(a,b);
REZULTAT : a = ”al doilea sir” si b isi pastreaza bininteles valoarea
initiala: b=”al doilea sir”;

2.b Functia strncpy

strcpy(sir_destinatie,sir_sursa, nr_caractere); – copiaza din sirul sir_ sursa in


sir_destinatie doar numarul de caractere specificat in nr_caractere.

Atentie : in cazul functiei strncpy daca numarul de caractere copiate din sirul
sursa este mai mic decat numarul de caractere din sirul destinatie atunci
caracaterele in plus din sirul destinatie nu vor fi afectate (rescrise). Urmariti
exemplul de mai jos :

Exemplu:

char a[50]=”hello”,b[40]=”world”;

strncpy(a,b,3);

REZULTAT a = ”worlo”; b=”world”

3a. Functia strcat


strcat(sir1,sir2); – concateneaza (adauga) la sirul de caractere sir1 sirul de
caractere sir2

Exemplu:

char a[50]=”vine”,b[50]=” vacanta”;

strcat(a,b);

Rezultat a = ”vine vacanta”


3b. Functia strncat
strcat(sir1, sir2 ,n ); – concateneaza (adauga) la sirul sir1 doar primele n
caractere din sirul de caractere sir2.

Exemplu:

char a[50]=”vine”,b[50]=” vacanta”;

strncat(a,b,3);

Rezultat a = ”vine va”

4.Functia strchr
strchr(sir,c); – are rolul de a cauta caracterul c in sirul sir. Cautarea se face de la
stanga la dreapta, iar functia intoarce adresa subsirului care incepe cu prima
aparitie a caracterului c. Daca nu este gasit caracterul, functia returneaza 0.

Exemplu:

char *s=”informatica”,b=’t’;

cout<<strchr(s,b); se tipareste ”tica”;

5.Functia strcmp
int strcmp(sir1,sir2); – are rolul de a compara doua siruri de caractere. Valoarea
returnata este <0 (daca sir10 (daca sir1>sir2). Functia strcmp face distinctie
intre literele mari si cele mici ale alfabetului.
Obs: Functia strcmp returneaza diferenta dintre codurile ASCII ale primelor
caractere care nu coincid

6.Functia strstr

Atentie – Aceasta functie va fi invata anul urmator pentru ca returneaza adresa


unei variabile nu valoarea efectiva a variabilei (POINTER-ul). Am lasat-o totusi
aici sa cititi functionalitatea acestei functii. (Nu intra la teza).
strstr(sir1,sir2); – are rolul de a identifica daca sirul sir2 este subsir al sirului
sir1. Daca este, functia returneaza adresa de inceput a subsirului sir2 in sirul sir1,
altfel returneaza 0. In cazul in care sir2 apare de mai multe ori in sir1, se
returneaza adresa de inceput a primei aparitii. Cautarea se face de la stanga la
dreapta.

7.Functia strlwr
strlwr(sir); – are rolul de a converti toate literele mari din sir in litere mici.
Restul caracterelor raman neschimbate.

8.Functia strupr
strupr(sir); – are rolul de a converti toate literele mici din sir in litere mari.
Restul caracterelor raman neschimbate

IV. Funcții asupra caracterelor


isalnum
isalnum( sir[i] );

Verifică dacă un caracter este alfanumeric (cifră, literă mare, literă mică). Returnează o
valoare diferită de zero dacă parametrul este alfanumeric, 0 în caz contrar.

isalpha
isalpha( sir[i]);

Verifică dacă un caracter este alfabetic (literă mare, literă mică). Returnează o valoare diferită
de zero dacă parametrul este alfabetic, 0 în caz contrar.

islower
islower( sir[i]);

Verifică dacă un caracter este literă mică. Returnează o valoare diferită de zero dacă
parametrul este literă mică, 0 în caz contrar.

isupper

isupper( sir[i]);

Verifică dacă un caracter este literă mare. Returnează o valoare diferită de zero dacă
parametrul este literă mare, 0 în caz contrar.

isdigit

isdigit( sir[i]);

Verifică dacă un caracter este cifră. Returnează o valoare diferită de zero dacă parametrul
este cifră, 0 în caz contrar.

tolower

tolower( sir[i]);

Convertește parametrul la literă mică. Dacă parametrul este literă mare, returnează valoarea
convertită, în caz contrar returnează valoarea inițială a parametrului.

toupper

toupper( sir[i]);

Convertește parametrul la literă mare. Dacă parametrul este literă mică, returnează valoarea
convertită, în caz contrar returnează valoarea inițială a parametrului.

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