std::strcmp în C++

Compară două șiruri C: 0 dacă sunt egale, negativ sau pozitiv după ordinea lor.

Sintaxă
#include <cstring>
int strcmp(const char* a, const char* b);
int strncmp(const char* a, const char* b, std::size_t n);

Ce face std::strcmp

Două șiruri C nu se pot compara cu ==: operatorul compară adresele, nu textul. strcmp(a, b) compară conținutul octet cu octet și returnează 0 dacă textele sunt identice, un număr negativ dacă a vine înainte și unul pozitiv dacă vine după.

strncmp(a, b, n) compară doar primele n caractere, util pentru verificarea unui prefix. Ca la std::string::compare, contează doar semnul rezultatului.

Parametri

Parametru Descriere
a, b Șirurile comparate.
n Pentru strncmp: numărul maxim de caractere comparate.

Ce returnează

Un int: negativ, 0 sau pozitiv.

Exemple

Exemplul 1: Egalitate și ordine

#include <cstdio>
#include <cstring>

int main() {
    const char* parola = "secret";
    char introdus[] = "secret";
    std::printf("== compară adrese: %s\n", (parola == introdus) ? "egale" : "diferite");
    std::printf("strcmp compară textul: %s\n", std::strcmp(parola, introdus) == 0 ? "egale" : "diferite");

    int r = std::strcmp("Ana", "Bogdan");
    std::printf("Ana vs Bogdan: %s\n", r < 0 ? "Ana e înainte" : "Ana e după");
}

Rezultat

== compară adrese: diferite
strcmp compară textul: egale
Ana vs Bogdan: Ana e înainte

Exemplul 2: Verificarea unui prefix cu strncmp

#include <cstdio>
#include <cstring>

int main() {
    const char* comenzi[] = {"GET /index", "POST /login", "GET /contact"};
    for (const char* c : comenzi) {
        if (std::strncmp(c, "GET", 3) == 0) {
            std::printf("citire: %s\n", c + 4);
        }
    }
}

Rezultat

citire: /index
citire: /contact

Greșeli frecvente

  • Compari șiruri C cu ==: verifici dacă sunt aceeași adresă de memorie, nu același text.
  • Scrii if (strcmp(a, b)) crezând că înseamnă „egale”: condiția e adevărată tocmai când diferă.

Comenzi înrudite

  • std::string::compare: Compară două șiruri și returnează un număr negativ, zero sau pozitiv, ca la sortare.
  • std::memcmp: Compară n octeți din două zone de memorie: 0 dacă sunt identici.
  • std::strchr: Caută un caracter (strchr) sau un text (strstr) într-un șir C și returnează pointer la el.