I've written a program that is supposed to have a recursive function that detects whether or not an input string character is a palindrome.
I have a program that removes all the white space and punctuation, which seems to work just fine, but when I actually run the string through the palindrome detector, it always returns false, except in the case that the value entered is only one letter long, in which case it returns true.
I've gone through the logic of my palindrome detection function, and it seems solid, but I haven't been able to figure out why it keeps returning false.
My base case is when there are no more character to look through (ie, when first and last are at the same position or adjacent positions in the string).
I'm still troubleshooting, but if anyone could enlighten me as to why this is happening, I'd be very grateful.
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
|
#include <iostream>
#include <string>
using namespace std;
string removeChar(string);
bool isPal(string&, int, int);
int main()
{
string testSentence;
string newSentence;
int first = 0;
int last = string::npos;
cout << "Palindrome Detection Program" << endl;
cout << "Enter a word or sentence, and the program will tell whether or not it is a palindrome." << endl;
getline(cin, testSentence);
newSentence = removeChar(testSentence);
cout << "Your entry " << (isPal(newSentence, first, last) ? "is a palindrome." : "is not a palindrome.") << endl;
cin.get();
return 0;
}
string removeChar(string testSentence)
{
string newSentence;
for (unsigned int c = 0; c < testSentence.length(); c++)
{
if (isalnum(testSentence[c]))
{
newSentence += testSentence[c];
}
}
return newSentence;
}
bool isPal(string& newSentence, int first = 0, int last = string::npos)
{
if (last = string::npos)
{
last = (newSentence.length()-1);
}
if (newSentence[first] == newSentence[last])
{
if ((first-last) == 0)
{
return true;
}
else if (first == (last - 1))
{
return true;
}
else
{
return isPal(newSentence, first+1, last-1);
}
}
else
{
return false;
}
}
|