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

时间:2017-02-25 05:19:31

标签: c++ palindrome

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

感谢任何其他反馈。

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

2 个答案:

答案 0 :(得分:0)

如果条件Line[i] == Line[c-1-i]适用于所有i < c/2,则字符串为回文结构。你打印出它的回文提供了两个匹配的字符。

例如:你的程序会说:

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

答案 1 :(得分:0)

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