C++回文调试

C++ palindrome debugging

我在笔记中遇到了这个问题:给定一个整数数组,编写一个函数来检查该数组中的元素是否为回文。我一直在研究我的代码看起来像这样:

#include<iostream>
#include<cmath>
using namespace std;

bool is_a_palindrome(int integers[], int length){
    int i;
    int middle = floor(length / 2);

    //while (length != 0 && length > 0){
    for (i = 0; i < middle; i++){

        if (integers[i] != integers[length - 1 -i]){
            return -2;
        }
        else{
            return true;
        }
    }
}

int main(){

    int array[4] = {1,2,2,1};
    int length = 4;
    is_a_palindrome(array, length);
}

当我 运行 代码时,我希望得到 1 为真或 -2 为假。 目前,我什么也没得到。 我不太确定问题出在哪里。任何帮助表示赞赏。

根据评论修改代码:

#include<iostream>
#include<cmath>
using namespace std;

bool is_a_palindrome(int integers[], int length){
    int i;
    int middle = floor(length / 2);

    //while (length != 0 && length > 0){
    for (i = 0; i < middle; i++){

        if (integers[i] == integers[length - 1 -i]){
            return true;
        }
        else{
            return false;
        }
    }
}

int main(){

    int array[4] = {1,2,2,1};
    int length = 4;
    return is_a_palindrome(array, length);
}

您在调用回文函数之前忘记了return

int main() {
    int array[4] = {1,2,2,1};
    into length = 4;

    return yourPalindromeFunction( array, length );
}

因为你没有写任何东西,C++ 创建了一个默认值 return 它变为零。

一些评论(当您修复了问题的标记时):

  • 你期待输出,但你真的在打印一些东西吗?
  • main 期望您 return 和 int,但您没有 returning 任何东西
  • 为什么你 returning -2 而不是 false? return类型是boolean,所以不能存储整数值。
  • 想想把return true放在哪里。什么时候是回文?

您编辑的回复存在一些问题:

  1. 只要前面的值与后面的值相同,您 return 就为真。如果您有一个数组 {1,2,3,5,6,8,7,8,9,1},您的函数将 return 为真,因为数组的前后都有一个 1

  2. 你 return -2 而不是函数中的 false return 是一个布尔值。

  3. Main return 是一个整数,你 return 调用你的辅助函数,return 是一个布尔值。

你可以做的是使用向量而不是数组,并使用 std::reverse 函数来检查向量是否相同。或者,您可以将 for 循环修复为不提早 return,而是检查 "front and back" 和 return 中的值是否相同,如果您通过整个for循环。像这样:

`    for (i = 0; i < middle; i++)
     {
        if (integers[i] != integers[length - 1 -i])
            return false;
     }
     return true;
`

其余问题由您解决,但我认为很多人已经为您确定了这些问题。祝你好运!