#include #include #include using namespace std; void swap(char& var1, char& var2); //switches values of var1 and var2 string reverse(string& palin); //returns string s in reverse order string remove_punct(string& palin, string& punct); //returns string s with punctuation removed string make_lower(string& palin); //returns copy of string s with all of the characters lowercase bool is_pal(string& palin); //returns true of s is a palindrome, otherwise returns false void writepalins(); ofstream output("palindromes.txt"); int main() { char runagain; do{ string str; cout << "Enter a candidate for palindrome testing: "; getline(cin, str); if(is_pal(str)) { cout << "\"" << str << "\" is a palindrome."; writepalins(string str); } else cout << "\"" << str << "\" is not a palindrome."; cout << endl; cout << "Run the program again? (y/n): "; cin >> runagain; cin.ignore(); cout << endl; } while((runagain == 'y') || (runagain == 'Y')); return 0; }//end main void swap(char& var1, char& var2) { char temp = var1; var1 = var2; var2 = temp; }//end swap string reverse(string& palin) { int start = 0; int end = palin.length(); string temp(palin); while(start < end) { end--; swap(temp[start], temp[end]); start++; } return temp; }//end reverse //uses and string make_lower(string& palin) { string temp(palin); for (int i = 0; i < palin.length(); i++) temp[i] = tolower(palin[i]); return temp; }//end make_lower string remove_punct(string& palin, string& punct) { string no_punct; //initialized to empty string int s_length = palin.length(); int punct_length = punct.length(); for (int i = 0; i < s_length; i++) { string a_char = palin.substr(i,1); int location = punct.find(a_char, 0); //find location of successive characters of src in punct_length if ((location < 0) || (location >= punct_length)) no_punct = no_punct + a_char; } return no_punct; } //uses functions make_lower, remove_punct bool is_pal(string& palin) { string punct(",;:.?!'\" "); string str(palin); str = make_lower(str); string lower_str = remove_punct(str, punct); return (lower_str == reverse(lower_str)); } void writepalins() {