- 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);
}
Functii Pentru Siruri de Caractere