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
    




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

    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().
    




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

    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().
    




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

    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




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

    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).




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

    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.




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

    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.

Attention reader! Don’t stop learning now. Get hold of all the important C++ Foundation and STL concepts with the C++ Foundation and STL courses at a student-friendly price and become industry ready.

Article Tags :
C++
Practice Tags :