Comparing two strings in C++

Given two strings, how to check if the two strings are equal or not.
Examples:

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

This problem can be solved using any of following two methords

  1. C++ Relational operators
    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    // CPP code to implement relational
    // operators on string objects
    #include <iostream>
    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;
    }
      
    // Main function
    int main()
    {
        string s1("Geeks");
        string s2("forGeeks");
        relationalOperation(s1, s2);
        return 0;
    }

    chevron_right

    
    

    Output:

    Geeks is not equal to forGeeks
    forGeeks is greater than Geeks
    
  2. std:: Compare()
    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    // CPP code perform relational
    // operation using compare function
    #include <iostream>
      
    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;
    }
      
    // Main function
    int main()
    {
        string s1("Geeks");
        string s2("forGeeks");
        compareFunction(s1, s2);
        return 0;
    }

    chevron_right

    
    

    Output:

    Geeks is not equal to forGeeks
    forGeeks is greater than Geeks
    

Differences between C++ Relational operators and compare() :-

  1. compare() returns int, while relational operators return boolean value i.e. either true or false.
  2. A single Relational operator is unique to a certain operation, while compare() can perform lots of different operations alone, based on the type of arguments passed.
  3. We can compare any substring at any position in a given string using compare(), which otherwise requires the long procedure of word by word extraction of string for comparison using relational operators.
    Example :-
    Using 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";
    

    Using Relational operator

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

    Above example clearly shows how compare() reduces lots of extra processing, therefore it is advisable to use it while performing substring comparison at some position, otherwise both perform almost in same manner.



My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.



Improved By : DeepjyotSinghKapoor



Article Tags :
Practice Tags :


6


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.