Comparando dos strings en C++

Dadas dos strings, cómo verificar si las dos strings son iguales o no. 
Ejemplos: 

Input  : ABCD, XYZ
Output : ABCD is not equal to XYZ
         XYZ is greater than ABCD

Input  : Geeks, forGeeks
Output : Geeks is not equal to forGeeks
         forGeeks is greater than Geeks

Este problema se puede resolver usando cualquiera de los siguientes dos métodos  

  • Operadores relacionales de C++

CPP

// CPP code to implement relational
// operators on string objects
#include <iostream>
using namespace std;
 
void relationalOperation(string s1, string s2)
{
 
    if (s1 != s2)
    {
        cout << s1 << " is not equal to " << s2 << endl;
        if (s1 > s2)
            cout << s1 << " is greater than " << s2 << endl;
        else
            cout << s2 << " is greater than " << s1 << endl;
    }
    else
        cout << s1 << " is equal to " << s2 << endl;
}
 
// Driver code
int main()
{
    string s1("Geeks");
    string s2("forGeeks");
    relationalOperation(s1, s2);
    string s3("Geeks");
    string s4("Geeks");
    relationalOperation(s3, s4);
    return 0;
}
Producción

Geeks is not equal to forGeeks
forGeeks is greater than Geeks
Geeks is equal to Geeks

Complejidad de tiempo: O(min(n,m)) donde n y m son la longitud de las strings.

Espacio auxiliar:  O(max(n,m)) donde n y m son la longitud de las strings.

Esto se debe a que cuando se pasa una string en la función, crea una copia de sí mismo en la pila.

  • std:: Comparar()

CPP

// CPP code perform relational
// operation using compare function
#include <iostream>
 
using namespace std;
 
void compareFunction(string s1, string s2)
{
    // comparing both using inbuilt function
    int x = s1.compare(s2);
 
    if (x != 0) {
        cout << s1
             << " is not equal to "
             << s2 << endl;
        if (x > 0)
            cout << s1
                 << " is greater than "
                 << s2 << endl;
        else
            cout << s2
                 << " is greater than "
                 << s1 << endl;
    }
    else
        cout << s1 << " is equal to " << s2 << endl;
}
 
// Driver Code
int main()
{
    string s1("Geeks");
    string s2("forGeeks");
    compareFunction(s1, s2);
    string s3("Geeks");
    string s4("Geeks");
    compareFunction(s3, s4);
    return 0;
}
Producción

Geeks is not equal to forGeeks
forGeeks is greater than Geeks
Geeks is equal to Geeks

Complejidad de tiempo: O(min(n,m)) donde n y m son la longitud de las strings.

Espacio auxiliar:  O(max(n,m)) donde n y m son la longitud de las strings.

Esto se debe a que cuando se pasa una string en la función, crea una copia de sí mismo en la pila.

Diferencias entre los operadores relacionales de C++ y compare() :-  

  1. compare() devuelve un int, mientras que los operadores relacionales devuelven un valor booleano, es decir, verdadero o falso.
  2. Un solo operador relacional es único para una determinada operación, mientras que compare() puede realizar muchas operaciones diferentes solo, según el tipo de argumentos pasados.
  3. Podemos comparar cualquier substring en cualquier posición en una string determinada usando compare(), que de otro modo requiere el largo procedimiento de extracción palabra por palabra de la string para compararla usando operadores relacionales.

Ejemplo:- 

  • Usando comparar()
// Compare 3 characters from 3rd position
// (or index 2) of str1 with 3 characters 
// from 4th position of str2. 
if (str1.compare(2, 3, str2, 3, 3) == 0)
   cout<<"Equal";
else
   cout<<"Not equal";
  • Usando el operador relacional
for (i = 2, j = 3; i <= 5 && j <= 6; i++, j++)    
{ 
    if (s1[i] != s2[j])
       break;
}
if (i == 6 && j == 7)
    cout << "Equal";
else
    cout << "Not equal";

El ejemplo anterior muestra claramente cómo compare() reduce mucho el procesamiento adicional, por lo tanto, es recomendable usarlo mientras se realiza la comparación de substrings en alguna posición, de lo contrario, ambos funcionan casi de la misma manera.

Publicación traducida automáticamente

Artículo escrito por Sakshi_Tiwari y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *