SIRURI DE CARACTERE
Definitie. Se numeste sir de caracter o succesiune de caractere cuprinse intre ghilimele.
Sirul de caractere poate fi privit ca un vector de caractere.
Declararea
char s1[10];
char s2[10]="sirul 2";
char s3[]="sirul 3";
s1 = vector de caractere care poate conţine maxim 9 caractere (s-au alocat 10 octeţi).
s2 = vector de caractere care poate conţine maxim 9 caractere şi care conţine 7 caractere (s-au alocat 10 octeţi).
s3 = vector de caractere care poate conţine maxim 7 caractere şi car conţine 7 caractere (s-au alocat 8 octeţi).
Greşeli:
//char s4[];
//char s5[5]="abcdef";
s4 =s-au alocat 0 octeţi = eroare de compilare
s5 =s-au alocat 5 octeţi şi s-au iniţializat primele 6 poziţii = eroare de compilare
Atenţie !!
Dacă instrucţiunile programului adaugă caractere unui şir de caractere, depăşind astfel spaţiul alocat, operaţiile se vor efectua eronat. Este posibil să se modifice astfel alte variabile. Se recomandă alocarea unui spaţiu suficient de mare pentru evitarea uni astfel de caz.
A2.Vizualizarea unui şir de caractere (modul de memorare)
char s[15]="LIMBAJUL C++";
for(i=0;i<strlen(s);i++)
prelucreaza s[i];
- s-au alocat 15 octeţi
- s-a memorat şirul de lungime 12
- după ultimul caracter din şir a fost adăugat automat caracterul NULL (\0 adică caracterul cu codul ASCII 0) indicând astfel sfârşitul şirului.
- au rămas liberi 2 octeţi
Explicaţii
Pentru memorarea unui şir de caractere, compilatorul reţine doar adresa primului caracter din şir. Celelalte caractere vor fi memorate folosind octeţii următori.
Compilatorul indică sfârşitul şirului de caractere plasând un caracter \0 (caracterul cu codul ASCII 0) după ultimul caracter din şir. Astfel, un şir de caractere este identificat de compilator prin adresa de început (adresa primului caracter din şir) şi primul caracter \0 găsit printre octeţii următori primului caracter.
Exemplu:
char s1[11]="Informatica";
char s2[100]="sir de lungime maxima 99";
cout <<"s1: "<< s1 << endl;
s2[5]='\0';
cout <<"s2: "<< s2 << endl;
Se va afişa:
s1: Informatica sir de lungime maxima 99
s2: sir d
Explicaţii
Şirul s1 conţine 11 caractere. Pentru acest şir s-au alocat 11 octeţi. Dintre cei 11 octeţi alocaţi, unul ar fi trebuit să fie rezervat pentru '\0'. Iniţializând şirul cu 11 caractere, caracterul '\0' nu a mai fost plasat la sfârşitul şirului.
Şirul s2 conţine 25 de caractere. Pentru a-l memora, compilatorul i-a alocat un spaţiu de 100 de octeţi începând (din întâmplare) de la adresa imediat următoare sfârşitului lui s1.
Datorită faptului că la sfârşitul şirului s1 nu există '\0', pentru a-l afişa, compilatorul parcurge octeţii succesivi de memorie până la găsirea unui alt '\0'. Acesta se va afla la sfârşitul lui s2.
Al cincilea caracter din s2 a fost înlocuit cu '\0'. Pentru a-l afişa pe s2, compilatorul parcurge octeţii succesivi, începând cu adresa primului caracter din s2, până la întâlnirea unui '\0'. Acest '\0' va fi găsit pe poziţia 5. Astfel compilatorul consideră că acolo se termină şirul s2.
Afisarea unui sir de caracter
- for(i=0;i<strlen(s);i++) cout<<s[i];
cout<<s;
Functii specifice sirurilor de caractere
1. Functia strlen. Are rolul de a returna lungimea unui şir(fără a lua în considerare caracterul nul). Forma generală : strlen(nume sir);
2 Functia strcpy.
Forma generală: strcpy(destinatie,sursa)
Funcția are rolul de a copia șirul de la adresa sursa la adresa destinație
3. Functia strcat.
Forma generală: strcat(destinație,sursă)
Funcţia are rolul de a adăuga șirului de la adresa destinație șirul de la adresa sursă
4. Functia strncat
Forma generală: strncat(destinație,sursă,n)
Funcția adaugă șirului destinație primii n octeți ai șirului sursă
5. Functia strchr Forma generală: strchr(nume şir, 'caracter' ) Functia căută în șirul nume şir caracterul caracter şi returnează subșirul care începe cu prima
6. Functia strrchr Returnează adresa ultimei apariții a caracterului căutat strrchr(şir, 'caracter' )
7. Functia strcmp Forma generală strcmp(sir1, sir2 ) Funcția are rolul de a compara 2 șiruri de caractere şi va returna valoarea:
< 0 dacă sir1 <sir2
=0 dacă sir1=sir2
>0 daca sir1>sir2
Exemplu Se compară șirul a cu șirul b şi se listează relația dintre cele 2 șiruri astfel:
- dacă primele n caractere sunt identice se compară caracterele n+1
- dacă caracterul n+1 al șirului a este situat alfabetic înaintea caracterului n+1 al șirului b se afișează ab
- dacă primul caracter al șirului a este situat alfabetic înaintea primului caracter al șirului b se afișează ab
indiferent de lungimea celor 2 șiruri
8. Functiile strlwr şi struwr
strlwr(s1) - convertește toate literele șirului s1 în litere mici
struwr(s2) - convertește toate literele șirului s2 în litere mari
9. Functia strstr
Forma generală: strstr(sir1,sir2)
Funcția identifică dacă șirul sir2 este subșir al șirului sir1
10. Functia strcspn Forma generală: strcspn(s1,s2) Funcția returnează numărul caracterelor din șirul s1 care nu se găsesc în șirul s2
11. Functia spn
Forma generală: strspn(s1,s2)
Funcția returnează numărul caracterelor din șirul s1 care se găsesc în șirul s2