Comparer deux chaînes en C++

Étant donné deux chaînes, comment vérifier si les deux chaînes sont égales ou non.
Exemples:

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 

Ce problème peut être résolu en utilisant l'une des deux méthodes suivantes

    Opérateurs relationnels C++

RPC




// CPP code to implement relational> // operators on string objects> #include> 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;> }>

Sortir

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

Complexité temporelle : O(min(n,m)) où n et m sont la longueur des chaînes.

Espace auxiliaire : O(max(n,m)) où n et m sont la longueur des chaînes.

En effet, lorsque la chaîne est passée dans la fonction, elle crée une copie d'elle-même dans la pile.

    std :: Comparer()

RPC




// CPP code perform relational> // operation using compare function> #include> 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;> }>

Sortir

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

Complexité temporelle : O(min(n,m)) où n et m sont la longueur des chaînes.

Espace auxiliaire : O(max(n,m)) où n et m sont la longueur des chaînes.

En effet, lorsque la chaîne est passée dans la fonction, elle crée une copie d'elle-même dans la pile.

Différences entre les opérateurs relationnels C++ et compare() :-

  1. compare() renvoie un entier, tandis que les opérateurs relationnels renvoient une valeur booléenne, c'est-à-dire vrai ou faux.
  2. Un seul opérateur relationnel est unique à une certaine opération, tandis que compare() peut effectuer seul de nombreuses opérations différentes, en fonction du type d'arguments transmis.
  3. Nous pouvons comparer n'importe quelle sous-chaîne à n'importe quelle position dans une chaîne donnée en utilisant compare(), ce qui nécessite autrement la longue procédure d'extraction mot par mot de la chaîne pour comparaison à l'aide d'opérateurs relationnels.

Exemple:-

    Utiliser comparer()
// 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'; 
    Utilisation de l'opérateur relationnel
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'; 

L'exemple ci-dessus montre clairement comment comparer() réduit beaucoup de traitements supplémentaires, il est donc conseillé de l'utiliser lors de la comparaison de sous-chaînes à une certaine position, sinon les deux fonctionnent presque de la même manière.