Siruri de caractere

1.Declararea unui sir de caractere.

char nume[nr];

Exemplu:

char s[256];

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).

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

2.Citirea sirului de caractere de la tastatura

Se utilizeaza functia cin.get() din string.h

exemplu:

cout<<"Introduceti sirul:";
cin.get (s,255);

Pentru a citi doua siruri de caractere se utilizeaza cin.get() fara parametri, astfel:

cin.get(s1,15);
cin.get();
cin.get(s2,10);

3.Afisarea sirului:

cout<<s;

Se poate utiliza si afisarea caracter cu caracter:

for ( i = 0; i < strlen (s); i++)
cout<< s [ i ];

unde strlen ( ) este functia care determina lungimea sirului

 Functia STRTOK ()

Funcţia are rolul de a împarţi şirul str în  subşiruri separate de orice caracter aflat în lista de delimitatori, prin apelarea ei succesivă.

La primul apel, parametrul str trebuie sa fie un şir de caractere, ce urmează a fi împartit. Apelurile urmatoare, vor avea în loc de strNULL conţinuând împarţirea aceluiaşi şir.

Funcţia va returna la fiecare apel un un subsir, ignorând caracterele cu rol de separator aflate în şirul de delimitatori. O dată terminat şirul, funcţia va returna NULL.

Forma generala : strtok( str, s)

Exemplu:

    1.Afisarea cuvintelor din sir pe randuri separate:

    #include 
    #include
    using namespace std;
    
    int main()
    {
    char s[256], *p;
    cin.get(s,255);
    p=strtok(s," ");
    while (p)
    {
    cout<<p<<endl;
    p=strtok(NULL, " ") ;
    }
    return 0;
    }

    2.inversarea cuvintelor din sir

    #include 
    #include
    using namespace std;
    
    int main()
    {
        char s[256], *p;
        cin.get(s,255);
        p=strtok(s," ");
        while (p)
        {strrev(p);
           cout<<p<<endl;
           p=strtok(NULL, " ") ;
        }
    
        return 0;
    }

    FUNCTII PENTRU OPERATII CU SIRURI DE CARACTERE

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

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

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

    2. 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); a = ”al doilea sir”; b=”al doilea sir”;
    

    3.Functia strcat
    strcat(dest,sursa); – concateneaza doua siruri de caractere

    Exemplu:
    char *a=”vine ”,*b=”vacanta”;
    strcat(a,b); a = ”vine vacanta”;
    

    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
    strstr(sir1,sir2); – are rolul de a identifica daca sirul sir2 este subsir al sirului sir1. Daca e, 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