有人会非常友好地告诉我如何使用这个回文检查器找到正确的方向吗
#include <iostream>
using namespace std;
bool isPal(string number){
for (int i = 0, j = number.length(); i < number.length(), j > 0; i++, j--)
if (i == j){
return true;
}
else
return false;
}
int main(){
cout << isPal("helleh") << "\n";
cout << isPal("9009") << "\n";
system("pause");
return 0;
}
答案 0 :(得分:2)
对于初学者,请确保将j初始化为number.length() - 1.直线长度将使您超出界限,因为我们从0开始计数。另外,(i == j)比较指数i和j,而不是元素。
for (int i = 0, j = number.length() - 1; i < j; i++, j--) {
if (number[i] != number[j])
return false;
}
return true;
答案 1 :(得分:1)
这是一种简单的方法:
#include <algorithm>
#include <string>
bool isPal(const std::string& number)
{
return std::equal(number.begin(),
number.begin() + number.size()/2,
number.rbegin());
}
关于您的代码,如果任何一个元素不匹配,您必须返回false
。如果所有元素都匹配,则仅返回true
。目前,只要字符串的长度不是true
,您就会返回0
,因为您要比较索引i
和j
,而不是元素。你需要改变你的逻辑:
string::size_type len = number.length();
if (len == 0) return true; // corner case
for (string::size_type i = 0, j = len; i < len/2; i++, j--)
{
if (number[i] != number[j-1]) return false;
}
return true;
另请注意,您不必迭代所有元素,只需一半。但我建议使用标准库。您可以从上面的示例中看到,在使用标准库算法时,更难以引入错误。
答案 2 :(得分:0)
试试这个。它对我有用。
bool isPal(string number)
{
int len = number.length();
for (int i = 0, j = len-1; j > i ; ++i, --j)
{
if ( number[i] != number[j] )
{
return false;
}
}
return true;
}