【发布时间】:2014-04-17 04:45:19
【问题描述】:
如何在 C++ 中创建回文函数?我正在使用 2 种函数类型(bool 和 void)。 到目前为止,这是我的代码(我非常感谢任何帮助,为什么我的代码不起作用?)谢谢!
#include <iostream>
#include <cctype>
#include <cstdlib>
#include <string>
using namespace std;
void reverse(char *);
bool isPalindrome(char *);
int main()
{
char a[10];
cout << "string ";
cin.getline(a, 10);
if (palindrome(a))
cout << "true";
else
cout << "false";
return 0;
}
void reverse(char *s)
{
char *point = s;
int i, min;
for (i = 0; *point != '\0'; i++)
point++;
min = i;
point--;
for (i = min; i > 0; i--)
{
cout << *point--;
}
}
bool ispalindrome(char *s)
{
bool status;
char *original = s;
char *point = s;
reverse(point);
for (int i = 0; point != '\0'; i++)
{
if (point[i] == original[i])
status = true;
else
status = false;
}
return status;
}
【问题讨论】:
-
所以,在我阅读所有这些代码之前...您收到错误消息还是答案不正确?添加该细节,然后对其进行说明。如果是错误信息,请给它。如果不正确,请显示一些示例输入和输出。
-
感谢您的回复。它给了我这个错误:线程 1:EXC_BAD_ACCESS(code=1.address=0x7fffSfc87000)
-
当你设置 status = false 你应该打破循环(应该是一段时间,而不是一个 for one)因为如果中间 2 个字母相等,它返回 true,即使其他字母都是不同
-
一般 cmets:1. 这不是 c++,2. 你的
reverse()函数没有意义,3. 你在isPalindrome()函数中的循环不正确。您可以通过简单地从字符串的两端迭代检查两个字符是否相等来简化这一点。或者使用一些标准库算法(std::reverse()和std::equal()) -
@hidrargyro 感谢您的解释。我做了一些测试,现在我明白了如何使用 status = false。
标签: c++ function boolean palindrome