我的函数是一个简单的回文算法,它应该接受一个输入整数(test),将其转换为字符串(test_s),然后在新变量(test_s_reverse)中反转该字符串,然后如果test_s等于test_s_reverse则返回true。
bool is_palindrome(int test){
test_s = to_string(test);
test_length = test_s.length();
for (int i=(test_length + 1); i>=0; i--){
test_s_reverse += test_s[i];
}
if (test_s_reverse == test_s){
return true;
}
else {
return false;
}
}
我创建了一个main函数来测试结果,使用输入12321,程序返回false,即使couttest_s_reverse=12321,test_s=12321。
我做错了什么?
您应该使用test_length-1
而不是test_lenght1
,因为在新的反向字符串中,您有一些额外的字符,如果您打印它们,您将无法看到它们。
. long()
函数返回字符串中的字符数。所以你要么使用test_length
,但你使用i
但是,如果您从test_length
开始,则需要进行编辑,因为test_length
位置没有字符:
test_s_reverse += test_s[i-1];
如果您使用纯C代码,它应该如下所示:
bool is_palindrome(int test){
string test_s = to_string(test);
int test_length = test_s.length();
string test_s_reverse;
for (int i=(test_length); i>0; i--){
test_s_reverse += test_s[i-1];
}
if (test_s_reverse == test_s){
return true;
}
else {
return false;
}
}
如果由我决定,我会以不同的方式做这项工作。
std::string
有一个构造函数来为一对迭代器构建字符串。它还支持反向迭代器。因此,您可以像这样更轻松地构造一个反向字符串:
std::string test_s_reversed(test_s.rbegin(), test_s.rend());
…但是考虑到这在很大程度上简化了任务,你可以把大部分简化成这样:
bool is_palindrome(std::string const &s) {
return s == std::string(s.rbegin(), s.rend());
}
整数的实现将如下所示:
bool is_palindrome(int val) {
return is_palindrome(std::to_string(val));
}