Search code examples
c++palindrome

Why isn't my palindrome checker working?


I can't for the life of me get my code to work. It identifies palindromes correctly, but for some reason, some non-palindromes words get marked as palindromes. Not all, just sum. And biggest headache of all, I can't figure out the correlation between of the non-palindromes that pass.

Any other feedback is appreciated.

#include <iostream> 
#include <ctype.h> 
#include <string.h> 
#include <limits> 

using namespace std;

int main() {

const int a(15);
char Line[a + 1];
int i;


do {
    cout << "Enter a possible palindrome" << endl;
    cin.getline(Line, a + 1);
    if (cin.fail())
    {
        cin.clear();
        cin.ignore(numeric_limits<streamsize>::max(), '\n');
    }
    else;

    for (int i = 0; i < strlen(Line); i++) {
        Line[i] = (char)tolower(Line[i]);
    }

    int c = strlen(Line);
    for (int i = 0; i < c / 2; i++) {


        while (!(((int)Line[c - 1 - i] >= 'a' && (int)Line[c - 1 - i] <= 'z') || ((int)Line[c - 1 - i] >= 'A' && (int)Line[c - 1 - i] <= 'Z'))) {
            c--;
        }

        if ((Line[i] == Line[c - 1 - i]))
        {
            cout << "is a Palindrome" << endl;

        }
        else
            cout << Line << " is not a palindrome." << endl;
        break;

    }




} while (strcmp(Line, "END") != 0);

return 0;

Solution

  • The string is a palindrome if the condition Line[i] == Line[c-1-i] holds for all i < c/2. You print out that its a palindrome provided two of the characters match.

    Eg: Your program would say:

    "abdca" //is a palindrome since the first and last character match.