First off, this is for an assignment.
What's required:
1.Take in string input
2. copy string (stripping out white space, punctuation, and
covert all characters to uppercase in the process)
3. Then determine if this copied string is a palindrome.
The method required for determining a palindrome:
Base Case: string length is <= 1
General Case: if first letter != last letter, false, otherwise
point to next letter and write '\0' to last letter and
call the method again
For example:
RACECAR\0 R==R
ACECA\0 A==A
CEC\0 C==C
E\0 E <= 1 TRUE!
I cannot get my isPalindrome function to work correctly. Everything else is spot on, as far as I can tell. I really think the problem lies in my recursive call. I have been debugging this for 2 days and I cannot figure why the return is wrong. Any help would be GREATLY appreciated. I'm not looking for a hand out, maybe just some extra eyes on this code. Thanks.
#include <iostream>
#include <string>
#include <cctype>
using namespace std;
int charCount(char * copy)
{
int count = 0;
for (int i = 0; copy[i] != '\0'; i++)
{
count++;
}
return count;
}
bool isPalindrome(char *copy)
{
bool result = false;
int size = charCount(copy);
char * last = ©[size - 1];
if (size <= 1)
{
result = true;
}
if (copy != last)
{
result = false;
}
else
{
++copy;
last = '\0';
isPalindrome(copy);
}
return result;
}
void stringCopy(char * source, char * destination)
{
int sourceIndex = 0;
int destIndex = 0;
while (source[sourceIndex] != '\0')
{
while (!(isalnum(source[sourceIndex])) && source[sourceIndex] != '\0')
{
sourceIndex++;
}
if (source[sourceIndex] == '\0')
{
break;
}
if (isalpha(source[sourceIndex]))
{
destination[destIndex] = toupper(source[sourceIndex]);
}
if (isdigit(source[sourceIndex]))
{
destination[destIndex] = source[sourceIndex];
}
sourceIndex++;
destIndex++;
}
destination[destIndex] = '\0';
}
int main()
{
string input = "";
cout << "Enter a string: ";
getline(cin, input);
char * source = &input[0];
int sourceSize = charCount(source);
char * copy = new char[sourceSize];
stringCopy(source, copy);
int copySize = charCount(copy);
if (isPalindrome(copy))
{
cout << input << " is a palindrome!" << endl;
}
else
{
cout << input << " is not a palindrome" << endl;
}
return 0;
}