Date due stringhe, come verificare se le due stringhe sono uguali o meno.
Esempi:
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>
Questo problema può essere risolto utilizzando uno dei due metodi seguenti
- Operatori relazionali C++
CPP
Java concatena stringhe
// 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;> }> |
>
>Produzione
Geeks is not equal to forGeeks forGeeks is greater than Geeks Geeks is equal to Geeks>
Complessità temporale: O(min(n,m)) dove n e m sono la lunghezza delle stringhe.
Spazio ausiliario: O(max(n,m)) dove n e m sono la lunghezza delle stringhe.
Questo perché quando la stringa viene passata nella funzione crea una copia di se stessa nello stack.
- std:: Confronta()
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;> }> |
>
>Produzione
Geeks is not equal to forGeeks forGeeks is greater than Geeks Geeks is equal to Geeks>
Complessità temporale: O(min(n,m)) dove n e m sono la lunghezza delle stringhe.
Spazio ausiliario: O(max(n,m)) dove n e m sono la lunghezza delle stringhe.
Questo perché quando la stringa viene passata nella funzione crea una copia di se stessa nello stack.
Differenze tra gli operatori relazionali C++ e compare() :-
- compare() restituisce un int, mentre gli operatori relazionali restituiscono un valore booleano, ovvero true o false.
- Un singolo operatore relazionale è unico per una determinata operazione, mentre compare() può eseguire molte operazioni diverse da solo, in base al tipo di argomenti passati.
- Possiamo confrontare qualsiasi sottostringa in qualsiasi posizione in una data stringa utilizzando compare(), che altrimenti richiederebbe la lunga procedura di estrazione parola per parola della stringa per il confronto utilizzando operatori relazionali.
Esempio:-
- Usando confronta()
// 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';>
- Utilizzo dell'operatore relazionale
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'esempio sopra mostra chiaramente come confrontare() riduce molta elaborazione extra, quindi è consigliabile utilizzarlo mentre si esegue il confronto delle sottostringhe in una certa posizione, altrimenti entrambi si comportano quasi allo stesso modo.