Ce face std::string::compare
a.compare(b) returnează 0 dacă șirurile sunt identice, un număr negativ dacă a vine înaintea lui b în ordine lexicografică și un număr pozitiv dacă vine după. Contează doar semnul, nu valoarea exactă.
Comparația se face octet cu octet, după codurile caracterelor: majusculele (A=65) vin înaintea minusculelor (a=97), iar literele cu diacritice (coduri peste 127) vin după toate literele fără diacritice. Pentru o simplă verificare de egalitate sau ordine, operatorii ==, <, > sunt mai clari.
Varianta cu poziție compară doar o bucată din șir, fără să creeze un subșir nou.
Parametri
| Parametru | Descriere |
|---|---|
alt |
Șirul cu care se compară. |
poz, n |
Opțional: se compară doar n caractere de la poz din șirul curent. |
Ce returnează
Un int: negativ, 0 sau pozitiv.
Exemple
Exemplul 1: Ordinea a două nume
#include <iostream>
#include <string>
const char* semn(int r) {
return r < 0 ? "înainte" : (r == 0 ? "egal" : "după");
}
int main() {
std::string a = "Ana";
std::cout << "Ana vs Bogdan: " << semn(a.compare("Bogdan")) << '\n';
std::cout << "Ana vs Ana: " << semn(a.compare("Ana")) << '\n';
std::cout << "Ana vs ana: " << semn(a.compare("ana")) << '\n';
std::cout << "Ana vs Andrei: " << semn(a.compare("Andrei")) << '\n';
}
Rezultat
Ana vs Bogdan: înainte
Ana vs Ana: egal
Ana vs ana: înainte
Ana vs Andrei: înainte
Exemplul 2: Compararea unei bucăți
#include <iostream>
#include <string>
int main() {
std::string numar = "+40740123456";
if (numar.compare(0, 3, "+40") == 0) {
std::cout << "Număr din România\n";
}
}
Rezultat
Număr din România
Greșeli frecvente
- Verifici
if (a.compare(b))crezând că înseamnă „egale”: este adevărat tocmai când șirurile diferă. Foloseștea == b. - Sortezi nume românești cu comparația implicită: „Ștefan” ajunge după „Zoe”, pentru că „Ș” are cod mai mare. Ordinea alfabetică corectă cere o comparație cu localizare (
std::locale,std::collate).
Comenzi înrudite
std::string::starts_with: Verifică dacă șirul începe (starts_with) sau se termină (ends_with) cu un text dat (C++20).std::strcmp: Compară două șiruri C: 0 dacă sunt egale, negativ sau pozitiv după ordinea lor.std::memcmp: Compară n octeți din două zone de memorie: 0 dacă sunt identici.