std::string::compare() in C++

compare() is a public member function of string class. It compares the value of the string object (or a substring) to the sequence of characters specified by its arguments.
The compare() can process more than one argument for each string so that one can specify a substring by its index and by its length.

Return type : compare() returns an integer value rather than a Boolean value.

Different Syntaxes for string::compare() :

  1. Syntax 1: Compares the string *this with the string str.
    int string::compare (const string& str) const
    Returns:
    0 : if both strings are equal.
    A value < 0 : if *this is shorter than str or,
    first character that doesn't match is smaller than str.
    A value > 0 : if *this is longer than str or,
    first character that doesn't match is greater
    
    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    // CPP code for demonstrating 
    // string::compare (const string& str) const
      
    #include<iostream>
    using namespace std;
      
    void compareOperation(string s1, string s2)
    {
        // returns a value < 0 (s1 is smaller then s2)
        if((s1.compare(s2)) < 0)
            cout << s1 << " is smaller than " << s2 << endl;
      
        // returns 0(s1, is being comapared to itself)
        if((s1.compare(s1)) == 0)
            cout << s1 << " is equal to " << s1 << endl;
        else
            cout << "Strings didn't match ";
          
    }
      
    // Driver Code
    int main()
    {
        string s1("Geeks");
        string s2("forGeeks");
        compareOperation(s1, s2);
          
        return 0; 
    }

    chevron_right

    
    

    Output:

    Geeks is smaller than forGeeks
    Geeks is equal to Geeks
    
  2. Syntax 2: Compares at most, len characters of string *this, starting with index idx with the string str.
    int string::compare (size_type idx, size_type len, const string& str) const
    Throws out_of_range if index > size().
    
    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    // CPP code to demonstrate 
    // int string::compare (size_type idx, size_type len, 
    // const string& str) const
      
    #include<iostream>
    using namespace std;
      
    void compareOperation(string s1, string s2)
    {
        // Compares 5 characters from index number 3 of s2 with s1
        if((s2.compare(3, 5, s1)) == 0)
            cout << "Here, "<< s1 << " are " << s2;
      
        else
            cout << "Strings didn't match ";
    }
    // Driver Code
    int main()
    {
        string s1("Geeks");
        string s2("forGeeks");
        compareOperation(s1, s2);
           
      return 0; 
    }

    chevron_right

    
    

    Output:

    Here, Geeks are forGeeks
    
  3. Syntax 3: Compares at most, len characters of string *this starting with index idx with at most, str_len characters of string str starting with index str_idx.

    int string::compare (size_type idx, size_type len, const string& 
    str, size_type str_idx, size_type str_len) const
    Throws out_of_range if idx > size().
    Throws out_of_range if str_idx > str.size().
    
    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    // CPP code to demonstrate 
    // int string::compare (size_type idx, size_type len, const string& 
    // str, size_type str_idx, size_type str_len) const
      
    #include<iostream>
    using namespace std;
      
    void compareOperation(string s1, string s2)
    {
        // Compares 5 characters from index number 0 of s1 with
        // 5 characters from index 3 of s2
        if((s1.compare(0, 5, s2, 3, 5)) == 0)
            cout << "Welcome to " << s1 << s2 << " World";
      
        else
            cout << "Strings didn't match ";
    }
    // Driver Code
    int main()
    {
        string s1("Geeks");
        string s2("forGeeks");
        compareOperation(s1, s2);
           
      return 0; 
    }

    chevron_right

    
    

    Output:

    Welcome, to GeeksforGeeks World
    
  4. Syntax 4: Compares the characters of string *this with the characters of the C-string cstr.

    int string::compare (const char* cstr) const
    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    // CPP code to demonstrate
    // int string::compare (const char* cstr) const
      
    #include<iostream>
    using namespace std;
      
    void compareOperation(string s1, string s2)
    {
        // returns < 0 (s1 < "GeeksforGeeks")
        if((s1.compare("GeeksforGeeks")) < 0)
            cout << s1 << " is smaller than string " << "GeeksforGeeks"
      
        //returns 0 (s2 is "forgeeks")
        if((s2.compare("forGeeks")) == 0)
            cout << endl << s2 << " is equal to string " << s2; 
      
        else
            cout << "Strings didn't match ";
          
    }
    // Driver Code
    int main()
    {
        string s1("Geeks");
        string s2("forGeeks");
        compareOperation(s1, s2);
           
      return 0; 
    }

    chevron_right

    
    

    Output:

    Geeks is smaller than string GeeksforGeeks
    forGeeks is equal to string forGeeks
    
  5. Syntax 5: Compares at most, len characters of string *this, starting with index idx with all characters of the C-string cstr.

    int string::compare (size_type idx, size_type len, const char* cstr) const
    

    Note that cstr may not be a null pointer (NULL).

    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    // CPP code to demonstrate 
    // int string::compare (size_type idx, size_type len, 
    // const char* cstr) const
    #include<iostream>
    using namespace std;
      
    void compareOperation(string s1)
    {
        // Compares 5 characters from 0 index of s1 with "Geeks"
        if((s1.compare(0, 5, "Geeks")) == 0)
            cout << s1 << " are " << "awesome people"
          
        else
            cout << "Strings didn't match ";
       
    }
      
    // Driver Code
    int main()
    {
        string s1("Geeks");
        compareOperation(s1);
           
      return 0; 
    }

    chevron_right

    
    

    Output:

    Geeks are awesome people
    
  6. Syntax 6: Compares, at most, len characters of string *this, starting with index idx with chars_len characters of the character array chars.

    int string::compare (size_type idx, size_type len, const char* chars, 
    size_type chars_len)const

    Note that chars must have at least chars_len characters. The characters may have arbitrary values. Thus, ‘\0’ has no special meaning.

    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    // CPP code to demonstrate 
    // int string::compare (size_type idx, size_type len, 
    // const char* chars, size_type chars_len)const
      
    #include<iostream>
    using namespace std;
      
    void compareOperation(string s1, string s2)
    {
        // Compares 5 characters from 0 index of s1 with 
        // 5 characters of string "Geeks"
        if((s1.compare(0, 5, "Geeks", 5)) == 0)
            cout << "This is " << s1 <<  s2 ; 
       
        else
            cout << "Strings didn't match ";
    }
      
    // Driver Code
    int main()
    {
        string s1("Geeks");
        string s2("forGeeks");
        compareOperation(s1, s2);
           
      return 0; 
    }

    chevron_right

    
    

    Output:

    This is GeeksforGeeks
    

This article is contributed by Sakshi Tiwari. If you like GeeksforGeeks (We know you do!) 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 write comments if you find anything incorrect, or you want to share more information about the topic discussed above.



My Personal Notes arrow_drop_up


Article Tags :
Practice Tags :


2


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