Gegeven twee strings, hoe kun je controleren of de twee strings gelijk zijn of niet?
Voorbeelden:
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>
Dit probleem kan worden opgelost met behulp van een van de volgende twee methoden
- C++ Relationele operatoren
CPP
hoe te converteren naar string
// 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;> }> |
>
>Uitvoer
Geeks is not equal to forGeeks forGeeks is greater than Geeks Geeks is equal to Geeks>
Tijdcomplexiteit: O(min(n,m)) waarbij n en m de lengte van de snaren zijn.
Hulpruimte: O(max(n,m)) waarbij n en m de lengte van de snaren zijn.
Dit komt omdat wanneer string wordt doorgegeven in de functie, er een kopie van zichzelf in de stapel wordt gemaakt.
- std:: Vergelijk()
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;> }> |
>
tweedimensionaal arrayprogramma in c
>Uitvoer
Geeks is not equal to forGeeks forGeeks is greater than Geeks Geeks is equal to Geeks>
Tijdcomplexiteit: O(min(n,m)) waarbij n en m de lengte van de snaren zijn.
Hulpruimte: O(max(n,m)) waarbij n en m de lengte van de snaren zijn.
Dit komt omdat wanneer string wordt doorgegeven in de functie, er een kopie van zichzelf in de stapel wordt gemaakt.
Verschillen tussen C++ relationele operatoren en Compare() :-
- Compare() retourneert een int, terwijl relationele operatoren een Booleaanse waarde retourneren, dat wil zeggen waar of onwaar.
- Eén enkele Relationele operator is uniek voor een bepaalde bewerking, terwijl Compare() op zichzelf veel verschillende bewerkingen kan uitvoeren, gebaseerd op het type doorgegeven argumenten.
- We kunnen elke subtekenreeks op elke positie in een gegeven tekenreeks vergelijken met behulp van Compare(), wat anders de lange procedure vereist van woord-voor-woord-extractie van tekenreeksen voor vergelijking met behulp van relationele operatoren.
Voorbeeld:-
- Vergelijk() gebruiken
// 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';>
- Relationele operator gebruiken
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';> Het bovenstaande voorbeeld laat duidelijk zien hoe vergelijken() vermindert veel extra verwerking, daarom is het raadzaam om het te gebruiken tijdens het uitvoeren van substringvergelijkingen op een bepaalde positie, anders presteren beide bijna op dezelfde manier.