布尔函数 returning false 即使在 c++ 中满足 return true 的条件。为什么?
boolean function returning false even though condition is satisfied to return true in c++. Why?
我的函数是一个简单的回文算法,它应该接受一个输入整数(测试),将其转换为一个字符串(test_s),然后在一个新变量中反转该字符串(test_s_reverse) 然后 return 如果 test_s 等于 test_s_reverse.
则为真
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;
}
}
我创建了一个主要功能来测试结果并使用输入 12321 程序 returns false,即使 test_s_reverse 的 cout = 12321 和 test_s = 12321。
我做错了什么?
你应该使用 test_length - 1
而不是 test_lenght + 1
,因为在新的反转字符串中你有一些额外的字符,如果你打印它们是看不到的。
.length()
函数returns你正好得到字符串中的字符数。所以你要么选择 test_length
,但你选择 i>0
,或者如果你选择 i>=0
的循环,你选择 test_length - 1
,这样你就可以确定有新字符串末尾没有空白字符。
但是,如果您以 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));
}
我的函数是一个简单的回文算法,它应该接受一个输入整数(测试),将其转换为一个字符串(test_s),然后在一个新变量中反转该字符串(test_s_reverse) 然后 return 如果 test_s 等于 test_s_reverse.
则为真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;
}
}
我创建了一个主要功能来测试结果并使用输入 12321 程序 returns false,即使 test_s_reverse 的 cout = 12321 和 test_s = 12321。
我做错了什么?
你应该使用 test_length - 1
而不是 test_lenght + 1
,因为在新的反转字符串中你有一些额外的字符,如果你打印它们是看不到的。
.length()
函数returns你正好得到字符串中的字符数。所以你要么选择 test_length
,但你选择 i>0
,或者如果你选择 i>=0
的循环,你选择 test_length - 1
,这样你就可以确定有新字符串末尾没有空白字符。
但是,如果您以 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));
}