    01: #include <iostream>
    02: #include <string>
    03: #include <vector>
    04:
    05: using namespace std;
    06:
    07: /**
    08:    Tests whether a string is a palindrome. A palindrome
    09:    is equal to its reverse, for example "rotor" or "racecar".
    10:    @param s a string
    11:    @return true if s is a palindrome
    12: */
    13: bool is_palindrome(string s)
    14: {
    15:    // separate case for shortest strings
    16:    if (s.length() <= 1) return true;
    17:
    18:    // get first and last character, converted to lowercase
    19:    char first = s[0];
    20:    char last = s[s.length() - 1];
    21:
    22:    if (first == last)
    23:    {
    24:       string shorter = s.substr(1, s.length() - 2);
    25:       return is_palindrome(shorter);
    26:    }
    27:    else
    28:       return false;
    29: }
    30:
    31: int main()
    32: {
    33:    cout << "Enter a string: ";
    34:    string input;
    35:    getline(cin, input);
    36:    cout << input << " is ";
    37:    if (!is_palindrome(input)) cout << "not ";
    38:    cout << "a palindrome" << endl;
    39:    return 0;
    40: }