3 moduri de a compara șiruri în C++

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.

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.

  Cum să subvoltați un procesor pentru a crește performanța computerului