为什么我的回文检查器不工作?

Why isn't my palindrome checker working?

我这辈子都无法让我的代码正常工作。它正确识别回文,但由于某种原因,一些非回文单词被标记为回文。不是全部,只是总和。最让人头疼的是,我无法弄清楚通过的非回文之间的相关性。

欢迎任何其他反馈。

#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;

如果条件Line[i] == Line[c-1-i]对所有i < c/2都成立,则该字符串是回文。你打印出它是一个回文,提供了两个匹配的字符。

例如:您的程序会说:

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

我认为您的代码有点复杂。假设输入总是可读的,所以你只需要 cin >> Line;。设 n 是字符串的长度。现在我们使用从 0 到 n / 2 的循环来检查字符串的对称性。如果 Line[i] != Line[n - i - 1] 表示 Line 不对称(回文),那么我们只需要打印结果和 return 0。如果程序通过循环,则表示 Line 是回文串。这个问题很简单。对我来说,你的想法有点复杂。