Jump to content

[C++] Siruri de caractere


AIM Katzuno Valoare
 Share

Recommended Posts

Nivel: Incepator

 

In limbajul C++, pentru siruri de caractere, nu exista un tip special definit, dar acestea pot fi definite folosind tablouri unidimensionale(vectori) si pointeri care au ca tip de baza: char.

Pentru a marca sfarsitul sirului, se adauga un caracter suplimentar, NULL sau '\0'.

 

  1. Definirea sirurilor de caractere folosind tablouri unidemnsional:

char nume_sir[dim];

Unde nume reprezinta numele sirului de caractere, iar dim reprezinta dimensiunea.

Exemplu:

char a[101];

Elementele sirului de caractere vor fi accesate in mod similar vectorilor, prin numele tabloului urmat intre paranteze patrate de o expresie intreaga.

ATENTIE: Numerotarea pozitiilor expresiei incepe de la 0.

Exemplu:

 

char s[5]="abcd";//Se mai poate declara si: char s[5]={'a', 'b', 'c', 'd'}

/*

0->a

1->b

2->c

3->d

4->NULL

*/

2. Citirea sirurilor de caractere:

I. Folosind operatorul ">>"

Sintaxa:

cin>>sir1>>sir2>>...>>sirN;

Cand utilizam acest operator pentru citirea sirurilor de caractere, caracterele albe: spatiu, tab sau end line, nu pot intra in componenta sirului(nu vor fii citite).

Exemplu:

char s[5];

cin>>s;

/*

Daca textul este: "Ana are mere

Bunicu are prune."

La afisarea sirului, se va afisa: "AnaaremereBunicuareprune".

*/

II. Folosind functia "get"

a)Cu parametrii

Sintaxa: cin.get(sir1, nr)

Unde sir1 este o variabila de tip "char", nr este o expresie de tip intreg care reprezinta numarul de locuri alocate citirii.

Exemplu:

cin.get(sir1, 100)

//Se vor citi primele 100 de caractere pana la intalnirea caracterului NULL(pana cand se va termina sirul introdus).

Folosind functia "get" se pot retine in sir si caracterele albe, mentionate mai sus.

b) fara parametrii

Sintaxa: cin.get();

Este necesar a fi utilizata la citirea a doua siruri de caractere: dupa citirea primuui sir este necesar apelul functiei get fara parametrii pentru a prelua caracterul delimitator NEWLINE('\n'), altfel citirea celui de al doilea sir va fi oprita.

Exemplu:

char a[101], b[101];

cin.get(a,101);

cin.get();

cin.get(a, 101);

 

3. Afisarea sirurilor de caractere

 

Afisarea se poate face in mai multe moduri, insa aici voi prezenta doar afisarea cu ajutorul operatorului "cout".

Exemplu:

 

char s[5], a[5];

int i;

cin.get(s,5);

cin.get();

cin.get(a,5);

for (i=0;i<n;i++)

cout<<s;

 

4. Functii pentru operatii cu siruri de caractere

 

Pentru a opera cu siruri de caractere trebuie inclusa libraria <string.h>. Aceasta librarie contine mai multe functii, pe care le voi prezenta mai jos, posibil nu chiar pe toate:

 

1)strlen(sir);

Efect: returnează numărul de caractere al unui şir de caractere, fără a lua în considerare caracterul nul de la sfârşitul şirului

Exemplu:

char a[100]=”mama”;

cout<<“sirul are ”<<strlen(a)<<“ caractere”; //va afisa 4

 

2)strcpy(sir_dest,sir_sursa);

Efect: copiază şirul de la adresa sursa la adresa destinaţie. Copierea se termină la întâlnirea caracterului nul. Funcţia returnează adresa şirului destinaţie. Simulează operaţia de atribuire a=b.

Exemplu:

char a[100]=“crocodil”,b[100]=“hipopotam”;

strcpy(a,b);

cout<<“sirul a: ”<<a<<endl; //hipopotam

cout<<“sirul b: ”<<b<<endl; //hipopotam

 

3)strncpy(sir_dest,sir_sursa,n);

Efect: copiază primii n octeţi din şirul de la adresa sursă la adresa destinaţie, fără a adăuga caracterul nul. Funcţia returnează adresa şirului destinaţie. Sirul sursă rămâne nemodificat.

Exemplu:

char a[100]=“crocodil”,b[100]=“hipopotam”;

strncpy(a,b,4);

cout<<“sirul a: ”<<a<<endl; //hipo

cout<<“sirul b: ”<<b<<endl; //hipopotam

 

4)strcat(sir_dest,sir_sursa);

Efect: adaugă şirului de la adresa destinaţie, înaintea caracterului nul şirul de la adresa sursă. Şirul de la adresa sursă rămâne nemodificat. Operaţia se numeşte concatenare. La adresa destinaţie vom avea şirul destinaţie urmat de şirul sursă. Şirul destinaţie are lungimea egală cu suma lungimilor şirurilor.

Exemplu:

char a[100]=“mama”,b[100]=“merge”;

strcat(a,b);

cout<<“sirul a: ”<<a<<endl; //mamamerge

cout<<“sirul b: ”<<b<<endl; //merge

 

5)strncat(sir_dest,sir_sursa, n);

Efect: adaugă şirului de la adresa destinaţie, înaintea caracterului nul primii n octeţi ai şirul de la adresa sursă. Şirul de la adresa sursă rămâne nemodificat. Funcţia returnează adresa de început a şirului destinaţie.

Exemplu:

char a[100]=“mama ”,b[100]=“merge”;

strncat(a,b,3);

cout<<“sirul a: ”<<a<<endl; //mama mer

cout<<“sirul b: ”<<b<<endl; //merge

 

6)strchr(sir1, char1);

Efect: caută de la stânga la dreapta, caracterul char1 în şirul de caractere sir. Dacă este găsit, funcţia întoarce adresa subşirului care începe cu prima apariţie a caracterului citit şi se termină cu carcterul nul. Dacă nu este găsit intoarce o expresie cu valoarea 0.

Exemplu:

char a[100]=“crocodil”;

cout<<strchr(a,’o’); //ocodil

 

7)strrchr(sir1, char1);

Efect: caută de la dreapta la stânga, caracterul char1 în şirul de caractere sir. Dacă este găsit, funcţia întoarce adresa subşirului care începe cu ultima apariţie a caracterului citit şi se termină cu carcterul nul. Dacă nu este găsit intoarce o expresie cu valoarea 0.

Exemplu:

char a[100]=“crocodil”;

cout<<strrchr(a,’o’); //odil

 

8)strstr(sir1, sir2);

Efect: identifică dacă şirul sir2 este subşir(caractere succesive) al şirului sir1. dacă este găsit, funcţia returnează adresa sa de început în cadrul şirului s1, altfel returnează 0. Căutarea se face de la stânga la dreapta. Dacă sir2 apare de mai multe ori, returnează adresa primei sale apariţii.

Exemplu:

char a[100]=“azi ele fac cafele”,b[20]= “ele”;

cout<<strstr(a,b); //ele fac cafele

 

9)strcmp(sir1, sir2);

Efect: compară cele două şiruri de caractere. Valoarea returnată este:

<0 dacă sir1<sir2

=0 dacă sir1=sir2

>0 dacă sir1>sir2

Funcţia face distincţie între literele mari si literele mici. Compararea şirurilor se realizează comparând de la stânga la dreapta caracter cu caracter. Un şir este mai mic dacât altul dacă figurează în dicţionar inaintea lui.

Exemplu:

char a[20]=“adriana”,b[20]= “ana”, c[20]= “Ana”;

cout<<strcmp(a,b); //<0 deoarece ‘a’=’a’ si ‘d’<’n’ => “adriana”< “ana”

cout<<strcmp(a,c); //>0 deoarece ‘a’>’A’

cout<<strcmp(b,c); //>0 deoarece ‘a’>’A’

 

10)stricmp(sir1, sir2);

Efect: are acelaşi efect ca şi strcmp dar nu face diferenţă între literele mari şi literele mici.

Exemplu:

char b[20]= “ana”, c[20]= “Ana”;

cout<<stricmp(b,c); //==0

 

11)strncmp(sir1, sir2, n);

Efect: are acelaşi efect ca şi strcmp dar compara doar primele n caractere din cele doua siruri

Exemplu:

char b[20]= “adriana”, c[20]= “adina”;

cout<<strncmp(b,c,2); //==0

 

12)strncmpi(sir1, sir2, n);

Efect: are acelaşi efect ca şi strncmp dar nu face diferenţă între literele mari şi literele mici.

Exemplu:

char b[20]= “adriana”, c[20]= “ADina”;

cout<<strncmpi(b,c,2); //==0

 

13)strupr(s)

Efect: transformă un şir de caractere din litere mici în litere mari. Restul caracterelor rămân nemodificate.

Exemplu:

char a[100]=“1 crocodil”;

cout<<strupr(a); //1 CROCODIL

 

14)strlwr(s)

Efect: transformă un şir de caractere din litere mari în litere mici. Restul caracterelor rămân nemodificate.

Exemplu:

char a[100]=“1 CROCODIL”;

cout<<strupr(a); //1 crocodil

 

Daca aveti intrebari / nelamuriri, puteti lasa un reply in acest topic.

 

Sursa: Propriile cunostinte + internet.

 

 

Edited by Cdorsu
Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.