next up previous contents
Next: Observatii asupra sirurilor de Up: Caractere, siruri de caractere. Previous: Tablouri unidimensionale   Cuprins


Siruri de caractere

Cele mai des întâlnite utilizari ale tablorilor unidimensionale în limbajul C sunt sirurile de caractere, din cauza ca în C nu exista prevazut tipul de date sir de caractere. Pentru memorarea sirurilor se utilizeaza tablouri cu tipul de baza char, care au pe ultima pozitie, ca marca de sfârsit a sirului, caracterul ''$\backslash$0''.

Pe lânga necesitatea de a defini un sir de caractere ca si tablou de caractere, în prelucrarea sirurilor se utilizeaza deseori tipul pointer la caracter. De exemplu:

        
   char sir[30];     /* tablou de 30 de caractere */
   char *psir;       /* pointer la caracter */
Astfel, sir este o variabila de tipul tablou de caractere pentru care se rezerva un spatiu de memorie de 30 de octeti, în timp ce psir este un pointer la caracter care poate primi ca valoare adresa unui caracter (în particular, adresa primului element dintr-un sir de caractere). Trebuie retinut ca ori de câte ori se lucreaza cu variabile siruri de caractere într-un program, trebuie sa existe fie o definitie de forma celei prezentate pentru variabila sir, prin care se rezerva static (în timpul compilarii), spatiul de memorie necesar variabilei, fie sa se aloce dinamic memoria necesara.

Neexistând tipul sir de caractere, în C nu sunt prezenti nici operatorii pentru siruri. În schimb, biblioteca standard contine numeroase functii pentru prelucrarea sirurilor de caractere. O parte a functiilor pentru citirea/scrierea sirurilor, declarate în fisierul antet stdio.h, le-am prezentat în Capitolul 2. În continuare, trecem în revista functiile pentru compararea, copierea, concatenarea sirurilor, s.a.m.d. Acestea sunt declarate în fisierul string.h. Ele primesc adresele sirurilor prelucrate, prin intermediul parametrilor de tipul pointer la caracter.



int strcmp(char *s1, char *s2);

Efect: compara sirurile s1 si s2 si returneaza $<0$, daca sirul s1 $<$ sirul s2, 0 daca s1 egal s2, si $>0$ daca s1 $>$ s2.



int strncmp(char *s1, char *s2, int n);

Efect: identica cu strcmp, dar se compara sirurile s1 si s2 pentru cel mult n caractere.



char *strcpy(char *d, char *s);

Efect: copiaza sirul sursa s în sirul destinatie d si returneaza adresa sirului destinatie.



char *strncpy(char *d, char *s, int n);

Efect: copiaza maxim n caractere de la sursa s la destinatia d si returneaza adresa sirului destinatie.



int strlen(char *s);

Efect: returneaza lungimea sirului fara a numara caracterul terminator (''$\backslash$0'').



char *strcat(char *d, char *s);

Efect: concateneaza cele doua siruri si returneaza adresa sirului rezultat.

În paragraful urmator vor fi prezentate particularitati ale operatiilor cu siruri de caractere, cât si dificultati si erori tipice rezultate din manipularea sirurilor de caractere.



Subsections
next up previous contents
Next: Observatii asupra sirurilor de Up: Caractere, siruri de caractere. Previous: Tablouri unidimensionale   Cuprins
Cristian Gavrila 2001-10-02