E-mail: albescudavidefrancesco@gmail.com
Web: www.pbinfo.ro
  Functii Pentru Siruri de Caractere
  • Urmatoarele functii prelucreaza siruri de caractere. Daca nu se precizeaza altfel, prototipul lor se afla in header-ul cstring.

    strlen
    std::size_t strlen( const char* str );
    Returneaza lungimea sirului str, adica numarul de caractere din sirul al carui prim caracter se afla la adresa memorata in str. Caracterul nul nu se numara.

  • Exemple:

    cout << strlen("pbinfo"); // 6
    char s[10]="copil";
    cout << strlen(s); // 5
    cout << strlen(s + 2); //3
    strcpy
    char* strcpy( char* dest, const char* src );
    Copiaza caracterele din sirul aflat la adresa src, inclusiv caracterul nul, in sirul al carui prim element se afla la adresa din dest. /p>

  • Functia returneaza adresa dest.
  • Comportamentul acestei functii este nedefinit daca sirurile de la adresele dest si src se suprapun.
  • Exemple:

    char s[21], t[21] = "copil";
    strcpy(s , "pbinfo");
    cout << s; // pbinfo
    strcpy(s , t);
    cout << s; // copil
    strcpy(s , t + 2);
    cout << s; // pil
    strcpy(s + 2 , t);
    cout << s; // picopil
    strncpy
    char *strncpy( char *dest, const char *src, std::size_t count );
    Copiaza cel mult count caractere din sirul aflat la adresa src, in sirul al carui prim element se afla la adresa din dest.

  • in sirul dest nu se va plasa caracterul nul dupa cele count caractere copiate.
  • Functia returneaza adresa dest.
  • Comportamentul acestei functii este nedefinit daca sirurile de la adresele dest si src se suprapun.
  • Exemple:

    char s[100]="abcdefghjkl";
    strncpy(s, "poveste", 3);
    cout << s; // povdefghjkl
    strcat
    char *strcat( char *dest, const char *src );
    Adauga (concateneaza) caracterele din sirul aflat la adresa src, inclusiv caracterul nul, la sirul al carui prim element se afla la adresa din dest.

  • Functia returneaza adresa dest.
  • Comportamentul acestei functii este nedefinit daca sirurile de la adresele dest si src se suprapun.
  • Exemple:

    char s[21]="pbinfo", t[21] = "copil";
    strcat(s , t);
    cout << s; // pbinfocopil
    strcat(s , t + 2);
    cout << s; // pbinfocopilpil
    strchr
    char *strchr( char * str, char ch );
    Cauta caracterul ch in sirul al carui prim caracter se afla in memorie la adresa din str.

  • Functia returneaza adresa NULL, daca caracterul ch nu apare in sirul str, respectiva adresa primei aparitii al lui ch in str, daca ch apare in str.
  • Exemple:

    char s[21]="pbinfo";
    char * p = strchr(s , 'i');
    cout << p; // info
    char ch = 'i';
    if(strchr("aeiou" , ch) != NULL)
         cout << "DA"
    else
         cout << "NU";
    //se va afisa DA
    strstr
    char *strstr( char * s, char * t );
    Cauta sirul t in sirul al carui prim caracter se afla in memorie la adresa din s.

  • Functia returneaza adresa NULL, daca sirul t nu apare in sirul s, respectiva adresa primei aparitii al lui t in s, daca t apare in s.
  • Exemplu:

    char s[21]="pbinfo";
    char * p = strstr(s , "inf");
    cout << p; // info
    strcmp
    int strcmp( char * s, char * t );

  • Compara lexicografic cele doua siruri de caractere:

    daca sirul s este lexicografi mai mic decat t functia va returna o valoare negativa
    daca sirul s este lexicografi mai mare decat t functia va returna o valoare pozitiva
    daca cele doua siruri sunt identice functia va returna valoarea 0
    Standardul C/C++ stabileste doar semnul rezultatului, nu si valoarea acestuia. Valorile returnate pot fi, dar nu trebuie sa fie, -1 0 1.

  • Exemplu:

    char s[21]="abur", t[21]="abecedar";
    if(strcmp(s , t) < 0)
         cout << "Da"
    else
         cout << "Nu";
    // se va afisa Nu; cuvantul "abur" este lexicografic dupa "abecedar"
    strtok
    char *strtok( char *str, const char *sep );

  • Functia strtok extrage dintr-un sir de caractere cate un subsir (cuvant) delimitat de caractere din sirul sep. Functia se apeleaza in doua moduri:

    primul apel are ca parametri sirul din care se face extragerea si sirul separatorilor
    la urmatoarele apeluri primul parametru este NULL.
    Rezultatul functiei strtok este adresa de inceput a subsirului curent extras, sau NULL daca nu se mai poate extrage niciun subsir din sirul dat.

  • sirul din care se face extragerea se modifica in urma apelurilor. Daca este nevoie de el mai tarziu trebuie sa-i facem o copie.


  • Exemplu

  • Secventa de mai jos extrage dintr-un sir s cuvintele (separate prin caractere din multimea {' ', ',', '.'}) si le afiseaza pe linii diferite. sirul s se presupune declarat si citit.

    char sep[]=" .,";
    char * p = strtok(s , sep);
    while(p != NULL)
    {
         cout << p << endl;
         p = strtok(NULL , sep);
    }