Vergleich zweier Strings in C++
Wie kann man anhand zweier Zeichenfolgen überprüfen, ob die beiden Zeichenfolgen gleich sind oder nicht?
Beispiele:
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
Dieses Problem kann mit einer der beiden folgenden Methoden gelöst werden
- C++-Relationaloperatoren
CPP
// 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;> }> |
Ausgabe
Geeks is not equal to forGeeks forGeeks is greater than Geeks Geeks is equal to Geeks
Zeitkomplexität: O(min(n,m)) wobei n und m die Länge der Zeichenfolgen sind.
Hilfsraum: O(max(n,m)) wobei n und m die Länge der Zeichenfolgen sind.
Dies liegt daran, dass bei der Übergabe einer Zeichenfolge in der Funktion eine Kopie von sich selbst im Stapel erstellt wird.
- std:: Compare()
CPP
// 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;> }> |
Ausgabe
Geeks is not equal to forGeeks forGeeks is greater than Geeks Geeks is equal to Geeks
Zeitkomplexität: O(min(n,m)) wobei n und m die Länge der Zeichenfolgen sind.
Hilfsraum: O(max(n,m)) wobei n und m die Länge der Zeichenfolgen sind.
Dies liegt daran, dass bei der Übergabe einer Zeichenfolge in der Funktion eine Kopie von sich selbst im Stapel erstellt wird.
Unterschiede zwischen relationalen C++-Operatoren und vergleichen():-
- vergleichen() gibt einen int zurück, während relationale Operatoren einen booleschen Wert zurückgeben, d. h. entweder wahr oder falsch.
- Ein einzelner relationaler Operator ist für eine bestimmte Operation eindeutig, während „compare()“ viele verschiedene Operationen allein ausführen kann, basierend auf der Art der übergebenen Argumente.
- Wir können jede Teilzeichenfolge an jeder Position in einer bestimmten Zeichenfolge mit vergleichen() vergleichen, was ansonsten die lange Prozedur der Wort-für-Wort-Extraktion der Zeichenfolge zum Vergleich mit relationalen Operatoren erfordert.
Beispiel:-
- Compare() verwenden
// 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';
- Verwendung eines relationalen Operators
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'; Das obige Beispiel zeigt deutlich, wie vergleichen() reduziert viel zusätzlichen Verarbeitungsaufwand, daher ist es ratsam, es zu verwenden, während an einer bestimmten Position ein Teilstring-Vergleich durchgeführt wird, da sonst beide fast auf die gleiche Weise funktionieren.