rendered paste body#include <iostream>
#include <string>
#include <cctype>
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 <cctype> and <string>
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()
{