1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
|
#include<iostream>
#include<string>
#include<ctype.h>
#include<stdio.h>
using namespace std;
//prototype of functions
bool is_palindrome(string&, int, int);
string Reverse(string, string);
string remove_char(string);
int main()
{
//variable declarations
string userInput;
string sentence2;
int first = 0;
size_t last = string::npos;
int userchoice;
string reversed,r;
locale loc;
string answer;
//Loop to keep program running until user quits
do
{
//Reverse function
cout<< "Do you want to reverse a string (1), determine if it is a palindrome(2) or quit:" << endl;
cin >> userchoice;
cout<< userchoice<< endl;
cin.ignore(80,'\n');
if (userchoice ==1)
{
cout<< " Please enter a word or sentence, I will reverse it:" <<endl;
getline(cin, userInput);
cout<< Reverse(userInput, reversed) << " is reversed." << endl;
}
//palindrome function
if (userchoice ==2)
{
cout<< " Please enter a word or sentence, I will determine if it is a palindrome or not:" <<endl;
cin>>userInput;
// the upper to lowercase
string str= userInput;
for (size_t i=0; i<str.length(); ++i)
str[i] = tolower(str[i]);
sentence2 = remove_char(str);
cout<< (is_palindrome(sentence2, first, last) ? " is a palindrome." : " is not a palindrome.") << endl;
cin.get();
}
cout<< "Do you want to try again ('yes' or 'no'): " << endl;
cin>> answer;
}while (answer == "yes");
return 0;
}
//Functions
// remove non letters
string remove_char(string userInput)
{
string sentence2;
for (unsigned int x=0; x < userInput.length(); x++)
{
if (isalnum(userInput[x]))
{
sentence2 += userInput[x];
}
}
return sentence2;
}
// return true if palindrome
bool is_palindrome(string& sentence2, int first = 0, int last = string::npos)
{
if(last == string::npos)
{
last = (sentence2.length()-1);
}
if (sentence2[first] == sentence2[last])
{
if ((first-last)== 0)
{
return true;
}
else if (first ==(last-1))
{
return true;
}
else
{
return is_palindrome(sentence2, first+1, last-1);
}
}
else
{
return false;
}
}
// reverse string
string Reverse(string word, string reversed)
{
if(word.length() == 0)
{
return reversed;
}
else
{
string temp;
reversed = word.substr(0,1) + reversed;
temp = word.substr(1);
return Reverse(temp, reversed);
}
}
|