logo

Porovnání dvou řetězců v C++

Vzhledem k tomu, dva řetězce, jak zkontrolovat, zda jsou dva řetězce stejné nebo ne.
Příklady:

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>

Tento problém lze vyřešit pomocí kterékoli z následujících dvou metod



    C++ Relační operátory

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;> }>



>

smyčka bash while

>

Výstup

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

Časová náročnost: O(min(n,m)), kde n a m jsou délky řetězců.

Pomocný prostor: O(max(n,m)), kde n a m jsou délky řetězců.

Je to proto, že když je ve funkci předán řetězec, vytvoří se jeho kopie v zásobníku.

    std:: Porovnat()

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;> }>

>

>

Výstup

globální proměnné javascriptu
Geeks is not equal to forGeeks forGeeks is greater than Geeks Geeks is equal to Geeks>

Časová náročnost: O(min(n,m)), kde n a m jsou délky řetězců.

Pomocný prostor: O(max(n,m)), kde n a m jsou délky řetězců.

Je to proto, že když je ve funkci předán řetězec, vytvoří se jeho kopie v zásobníku.

Rozdíly mezi relačními operátory C++ a Compare() :-

  1. Compare() vrací int, zatímco relační operátory vrací booleovskou hodnotu, tj. buď true nebo false.
  2. Jediný relační operátor je jedinečný pro určitou operaci, zatímco funkce Compare() může sama provádět mnoho různých operací na základě typu předávaných argumentů.
  3. Můžeme porovnat jakýkoli podřetězec na libovolné pozici v daném řetězci pomocí funkce Compare(), která jinak vyžaduje dlouhou proceduru extrahování řetězce slovo po slově pro porovnání pomocí relačních operátorů.

Příklad:-

    Pomocí funkce Compare()
// 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';>
    Použití relačního operátoru
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';>

Výše uvedený příklad jasně ukazuje, jak na to porovnat() snižuje množství zpracování navíc, proto je vhodné jej používat při provádění porovnávání podřetězců na určité pozici, jinak obě fungují téměř stejně.