布尔函数 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));
}