1: /** @file test_if_palindrome.cpp 2: Determines if a string is a palindrome. 3: */ 5: #include <iostream> 6: #include <string> 7: using namespace std; 9: #include "utilities.h" 10: using Scobey::Pause; 11: using Scobey::ReadString; 12: using Scobey::userSaysYes; 14: bool isPalindrome 15: ( 16: const string s, //in 17: string::size_type first, //in 18: string::size_type last //in 19: ) 20: /**< 21: Determine whether a string is a palindrome. 22: @return true if s is a palindrome between the indices first 23: and last (inclusive), false otherwise. 24: @param s The full string to be tested. 25: @param first The lower index of the portion of the string 26: to be tested on the current call. 27: @param The upper index of the portion of the string to be 28: tested on the current call. 29: @pre s contains a non-empty string object and 30: 0 <= first, last <= s.length(). 31: @post No side effects. 32: */ 33: { 34: if (first >= last) 35: return true; 36: else 37: return (s[first] == s[last]) && 38: isPalindrome(s, first+1, last-1); 39: } 41: int main() 42: { 43: cout << "\nThis program tests a string and " 44: "reports whether it is a palindrome.\n"; 45: Pause(); 47: do 48: { 49: string s; 50: ReadString("Enter the string on the following line: \n", s); 51: if (isPalindrome(s, 0, s.length()-1)) 52: cout << "Yes, that was a palindrome.\n"; 53: else 54: cout << "No, that was not a palindrome.\n"; 55: } 56: while (userSaysYes("\nDo it again?")); 57: }