3 moduri de a compara șiruri în C++
În programarea C++, compararea șirurilor este o operație esențială, utilizată în diverse scenarii, precum ordonarea datelor, căutarea informațiilor și verificarea corectitudinii datelor. C++ oferă mai multe modalități de a compara șiruri, fiecare cu avantajele și dezavantajele sale.
Cuprins
Utilizarea operatorilor de comparație
Operatorii de comparație pot fi utilizați pentru a compara șirurile lexicografic, adică pe baza ordinii alfabetice a caracterelor din șiruri. Operatorii de comparație disponibili în C++ sunt:
* == – egalitate
* != – inegalitate
* < – mai mic decât
* > – mai mare decât
* <= – mai mic sau egal cu
* >= – mai mare sau egal cu
cpp
#include <iostream>
#include <string>
using namespace std;
int main() {
string str1 = "Salut";
string str2 = "Salut";
string str3 = "Bună";
if (str1 == str2) {
cout << "str1 și str2 sunt egale." << endl;
}
if (str1 > str3) {
cout << "str1 este mai mare decât str3." << endl;
}
return 0;
}
Utilizarea funcției strcmp
Funcția strcmp
din biblioteca standard C este utilizată și pentru compararea șirurilor. Aceasta returnează un întreg care indică rezultatul comparației:
* 0 – șirurile sunt egale
* Un număr pozitiv – primul șir este mai mare decât al doilea
* Un număr negativ – primul șir este mai mic decât al doilea
cpp
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char str1[] = "Salut";
char str2[] = "Salut";
char str3[] = "Bună";
int result = strcmp(str1, str2);
if (result == 0) {
cout << "str1 și str2 sunt egale." << endl;
}
result = strcmp(str1, str3);
if (result > 0) {
cout << "str1 este mai mare decât str3." << endl;
}
return 0;
}
Utilizarea clasei string
Pentru comparații mai avansate, C++ oferă clasa string
din biblioteca standard. Clasa string
include mai multe metode pentru compararea șirurilor, care oferă un control mai mare asupra criteriilor de comparație.
Metodele disponibile includ:
* compare() – compară două șiruri caracter cu caracter, returnează un întreg
* compare(n) – compară primele n caractere din două șiruri
* compare(pos, n, str) – compară n caractere din șirul curent, începând de la poziția pos
, cu un al treilea șir
* compare(pos, n, str, pos, n) – compară n caractere din șirul curent, începând de la poziția pos
, cu n caractere dintr-un al treilea șir, începând de la poziția pos
cpp
#include <iostream>
#include <string>
using namespace std;
int main() {
string str1 = "Salut";
string str2 = "Salut";
string str3 = "Bună";
int result = str1.compare(str2);
if (result == 0) {
cout << "str1 și str2 sunt egale." << endl;
}
result = str1.compare(str3);
if (result > 0) {
cout << "str1 este mai mare decât str3." << endl;
}
return 0;
}
Concluzie
Compararea șirurilor în C++ este o operație fundamentală cu mai multe opțiuni disponibile. Operatorii de comparație sunt simpli și eficienți, funcția strcmp
oferă compatibilitate cu C, iar clasa string
permite comparații mai avansate. Alegerea metodei adecvate depinde de cerințele specifice ale aplicației și de performanța dorită. În general, pentru comparații simple, operatorii de comparație sunt suficienți, în timp ce pentru comparații mai complexe, clasa string
oferă mai mult control și flexibilitate.
Întrebări frecvente
1. Care este diferența dintre ==
și strcmp
?
* ==
compară conținutul șirurilor, în timp ce strcmp
compară adresele de memorie ale șirurilor.
2. Care metodă este mai rapidă, strcmp
sau string::compare
?
* strcmp
este, de obicei, mai rapidă decât string::compare
, deoarece este o funcție nativă C.
3. Când ar trebui să folosesc clasa string
pentru comparații?
* Clasa string
ar trebui să fie utilizată atunci când sunt necesare comparații mai complexe, cum ar fi comparații care ignoră spațiile sau comparații care iau în considerare majusculele și minusculele.
4. Poate fi clasa string
utilizată pentru a compara caractere?
* Nu, clasa string
nu poate fi utilizată pentru a compara caractere individuale.
5. Care este complexitatea temporală a funcției strcmp
?
* Complexitatea temporală a funcției strcmp
este O(n), unde n este lungimea șirului mai lung.
6. Care este complexitatea temporală a metodei string::compare
?
* Complexitatea temporală a metodei string::compare
este, de asemenea, O(n), unde n este lungimea șirului mai lung.
7. Pot fi utilizate operatorii de comparație pentru a compara șiruri de lungimi diferite?
* Nu, operatorii de comparație nu pot fi utilizați pentru a compara șiruri de lungimi diferite.
8. Care este diferența dintre compararea lexicografică și compararea insensibilă la majuscule și minuscule?
* Compararea lexicografică compară șirurile caracter cu caracter, în timp ce compararea insensibilă la majuscule și minuscule ignoră majusculele și minusculele la comparare.