String C++

/* The following code example is taken from the book
 * "The C++ Standard Library - A Tutorial and Reference"
 * by Nicolai M. Josuttis, Addison-Wesley, 1999
 *
 * (C) Copyright Nicolai M. Josuttis 1999.
 * Permission to copy, use, modify, sell and distribute this software
 * is granted provided this copyright notice appears in all copies.
 * This software is provided "as is" without express or implied
 * warranty, and with no claim as to its suitability for any purpose.
 */
#include 
#include 
#include 
using namespace std;
bool nocase_compare (char c1, char c2)
{
    return toupper(c1) == toupper(c2);
}
int main()
{
    string s1("This is a string");
    string s2("STRING");
    
    // compare case insensitive
    if (s1.size() == s2.size() &&        // ensure same sizes
        equal (s1.begin(),s1.end(),      // first source string
               s2.begin(),               // second source string
               nocase_compare)) {        // comparison criterion
        cout << "the strings are equal" << endl;
    }
    else {
        cout << "the strings are not equal" << endl;
    }
    // search case insensitive
    string::iterator pos;
    pos = search (s1.begin(),s1.end(),   // source string in which to search
                  s2.begin(),s2.end(),   // substring to search
                  nocase_compare);       // comparison criterion
    if (pos == s1.end()) {
        cout << "s2 is not a substring of s1" << endl;
    }
    else {
        cout << '"' << s2 << "\" is a substring of \""
             << s1 << "\" (at index " << pos - s1.begin() << ")"
             << endl;
    }
}
/* 
the strings are not equal
"STRING" is a substring of "This is a string" (at index 10)
 */