为什么我的回文检查器不工作?
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
是回文串。这个问题很简单。对我来说,你的想法有点复杂。
我这辈子都无法让我的代码正常工作。它正确识别回文,但由于某种原因,一些非回文单词被标记为回文。不是全部,只是总和。最让人头疼的是,我无法弄清楚通过的非回文之间的相关性。
欢迎任何其他反馈。
#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
是回文串。这个问题很简单。对我来说,你的想法有点复杂。