我不能为我的生活让我的代码工作。它正确地识别了回文,但由于某种原因,一些非回文词被标记为回文。不是全部,只是总和。最令人头疼的是,我无法弄清楚通过的非回文之间的相关性。
感谢任何其他反馈。
#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;
答案 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。这个问题很容易。对我而言,你对它的看法很复杂。