strcmp()

Funcția strcmp() compară două șiruri de caractere caracter cu caracter, în ordine lexicografică.

Compararea caracterelor se face după codul lor ASCII. Prin urmare, se va face diferență între literele majuscule / minuscule.

Sintaxa
int strcmp(const char* sir1, const char* sir2);
Parametri
  • sir1: primul șir de caractere comparat;
  • sir2: al doilea șir de caractere comparat.
Returnare
Funcția returnează, în funcție de șirurile comparate, un număr întreg:
  • = 0, dacă șirurile sunt identice;
  • < 0, dacă primul caracter diferit din sir1 este mai mic decât cel din sir2;
  • > 0, dacă primul caracter diferit din sir1 este mai mare decât cel din sir2.

Numărul întreg returnat reprezintă de fapt diferența codurilor ASCII între primele două caractere diferite din cele 2 șiruri de caractere.


Publicitate

Exemplu de utilizare

#include <iostream>
#include <cstring>
using namespace std;

int main() {
    char s1[] = "portocala";
    char s2[] = "portocaliu";

    int rezultat = strcmp(s1, s2);

    if (rezultat == 0)
        cout << "Sirurile sunt identice" << endl;
    else if (rezultat < 0)
        cout << "\"" << s1 << "\" este mai mic decat \"" << s2 << "\"" << endl;
    else
        cout << "\"" << s1 << "\" este mai mare decat \"" << s2 << "\"" << endl;
        
    cout << rezultat;
    return 0;
}
"portocala" este mai mic decat "portocaliu"
-8

Variabila rezultat, afișată la final, arată diferența codurilor ASCII dintre primele caractere care diferă în cele 2 șiruri. În cazul nostru, valoarea reprezintă rezultatul operației 'a' - 'i'.


Publicitate

strncmp()

Funcția strncmp() compară lexicografic un număr maxim de caractere din 2 șiruri de caractere.

Compararea lexicografică a caracterelor este făcută prin codul ASCII. Literele majuscule / minuscule diferă între ele.

Sintaxa
int strncmp(const char* sir1, const char* sir2, size_t n);
Parametri
  • sir1: primul șir de caractere comparat;
  • sir2: al doilea șir de caractere comparat;
  • n: numărul maxim de caractere de comparat.
Returnare
Funcția returnează la fel, în funcție de diferența lexicografică, un număr întreg:
  • = 0, dacă primele n caractere din cele două șiruri sunt identice;
  • < 0, dacă sir1 este mai mic lexicografic considerând doar primele n caractere;
  • < 0, dacă sir1 este mai mare lexicografic considerând doar primele n caractere.

Numărul întreg returnat reprezintă de fapt diferența codurilor ASCII între primele două caractere diferite din cele două șiruri de caractere, în limita maximă precizată prin al treilea parametru al funcției.


Publicitate

Exemplu de utilizare

Pe același principiu cu exemplul anterior, vom folosi funcția strncmp() pentru a compara prefixul cuvintelor.

#include <iostream>
#include <cstring>
using namespace std;

int main() {
    char s1[] = "portocala";
    char s2[] = "portocaliu";

    int rezultat = strncmp(s1, s2, 7);

    if (rezultat == 0)
        cout << "Sirurile sunt identice" << endl;
    else if (rezultat < 0)
        cout << "\"" << s1 << "\" este mai mic decat \"" << s2 << "\"" << endl;
    else
        cout << "\"" << s1 << "\" este mai mare decat \"" << s2 << "\"" << endl;
    
    return 0;
}
Sirurile sunt identice

Dacă un șir de caractere comparat are lungimea mai mică și este prefix pentru al doilea șir, funcția consideră caracterul comparat din primul șir ca fiind NULL, iar rezultatul comparației va fi chiar codul ASCII al caracterului din celălalt șir.