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

Modalități de verificare a egalității șirurilor în C++

În universul programării C++, operația de comparare a șirurilor text este fundamentală, fiind folosită într-o varietate de situații, cum ar fi aranjarea datelor, căutarea de informații și verificarea corectitudinii input-urilor. Limbajul C++ oferă multiple metode pentru a efectua această comparare, fiecare cu particularitățile și avantajele sale.

Folosirea operatorilor de comparație

Operatorii de comparație permit evaluarea șirurilor în ordine lexicografică, adică în funcție de ordinea alfabetică a caracterelor componente. Operatorii disponibili în C++ pentru compararea șirurilor sunt:

  • == – verifică egalitatea
  • != – verifică inegalitatea
  • < – verifică dacă un șir este mai mic decât altul
  • > – verifică dacă un șir este mai mare decât altul
  • <= – verifică dacă un șir este mai mic sau egal cu altul
  • >= – verifică dacă un șir este mai mare sau egal cu altul


#include <iostream>
#include <string>

using namespace std;

int main() {
  string sir1 = "Salut";
  string sir2 = "Salut";
  string sir3 = "Bună";

  if (sir1 == sir2) {
    cout << "sir1 și sir2 sunt identice." << endl;
  }
  if (sir1 > sir3) {
    cout << "sir1 este plasat lexicografic după sir3." << endl;
  }

  return 0;
}

Utilizarea funcției strcmp

Funcția strcmp, disponibilă în biblioteca standard C, este de asemenea utilizată pentru comparații între șiruri. Această funcție returnează un număr întreg, al cărui semnificat este:

  • 0 – șirurile analizate sunt egale
  • Un număr pozitiv – primul șir este mai mare în ordinea lexicografică decât al doilea
  • Un număr negativ – primul șir este mai mic în ordinea lexicografică decât al doilea


#include <iostream>
#include <cstring>

using namespace std;

int main() {
  char sir1[] = "Salut";
  char sir2[] = "Salut";
  char sir3[] = "Bună";

  int rezultat = strcmp(sir1, sir2);
  if (rezultat == 0) {
    cout << "sir1 și sir2 sunt echivalente." << endl;
  }

  rezultat = strcmp(sir1, sir3);
  if (rezultat > 0) {
    cout << "sir1 este ordonat după sir3." << endl;
  }

  return 0;
}

Folosirea clasei string

Pentru scenarii de comparare mai sofisticate, C++ pune la dispoziție clasa string, inclusă în biblioteca standard. Aceasta oferă metode specializate pentru comparații, care permit un control mai precis asupra criteriilor de evaluare.

Metodele relevante includ:

  • compare() – compară șirurile caracter cu caracter, returnând un rezultat numeric
  • compare(n) – compară primele n caractere din două șiruri
  • compare(pos, n, sir) – compară n caractere dintr-un șir, începând de la o poziție specificată, cu un alt șir dat
  • compare(pos1, n1, sir, pos2, n2) – compară n1 caractere dintr-un șir, începând de la o poziție specificată, cu n2 caractere dintr-un alt șir, începând de la o altă poziție specificată


#include <iostream>
#include <string>

using namespace std;

int main() {
  string sir1 = "Salut";
  string sir2 = "Salut";
  string sir3 = "Bună";

  int rezultat = sir1.compare(sir2);
  if (rezultat == 0) {
    cout << "sir1 și sir2 sunt identice." << endl;
  }

  rezultat = sir1.compare(sir3);
  if (rezultat > 0) {
    cout << "sir1 este lexicografic mai mare decât sir3." << endl;
  }

  return 0;
}

Concluzii

Compararea șirurilor de caractere în C++ este o acțiune fundamentală care beneficiază de multiple opțiuni. Operatorii de comparație oferă o metodă directă și eficientă, funcția strcmp asigură compatibilitatea cu limbajul C, iar clasa string permite configurarea unor comparații mai specializate. Selectarea metodei potrivite depinde de cerințele specifice ale aplicației și de performanța dorită. Pentru comparații elementare, operatorii sunt adecvați, în timp ce pentru comparații mai complexe, clasa string oferă o flexibilitate și un control sporit.

Întrebări frecvente

1. Care este distincția dintre operatorul == și funcția strcmp?

Operatorul == compară valorile șirurilor, în timp ce funcția strcmp compară șirurile și returnează un rezultat numeric.

2. Care metodă de comparare este mai rapidă: strcmp sau string::compare?

De obicei, funcția strcmp este mai rapidă decât metoda string::compare, deoarece strcmp este o funcție nativă a limbajului C.

3. Când ar trebui să utilizăm clasa string pentru compararea șirurilor?

Clasa string este recomandată atunci când este nevoie de comparații mai specifice, cum ar fi compararea ignorând spațiile sau diferențele dintre litere mari și mici.

4. Se poate utiliza clasa string pentru compararea unor caractere individuale?

Nu, clasa string nu este destinată comparării caracterelor individuale.

5. Care este complexitatea funcției strcmp în termeni de timp?

Complexitatea temporală a funcției strcmp este O(n), unde n reprezintă lungimea celui mai lung șir.

6. Care este complexitatea temporală a metodei string::compare?

Complexitatea temporală a metodei string::compare este, de asemenea, O(n), unde n corespunde lungimii celui mai lung șir.

7. Se pot folosi operatorii de comparație pentru compararea șirurilor de lungimi diferite?

Da, operatorii de comparație pot fi utilizați pentru șiruri de lungimi diferite. Comparația se face lexicografic.

8. Care este diferența între compararea lexicografică și compararea insensibilă la majuscule/minuscule?

Compararea lexicografică se bazează pe ordinea alfabetică a caracterelor, în timp ce compararea insensibilă la majuscule/minuscule ignoră diferențele de tipul literei.