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; }
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; }
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() :-
- compare() devuelve un int, mientras que los operadores relacionales devuelven un valor booleano, es decir, verdadero o falso.
- 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.
- 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