c++回文调试

C++ palindrome debugging

本文关键字:调试 回文 c++      更新时间:2023-10-16

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

#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);
}

您编辑的回复有几个问题:

  1. 只要前面的值与后面的值相同,就返回true。如果你有一个数组{1,2,3,5,6,8,7,8,9,1},你的函数将返回true,因为在数组的前面和后面有一个1

  2. 在返回布尔值的函数中返回-2而不是false。

  3. Main返回一个int,你返回一个调用你的辅助函数,它返回一个布尔值。

你可以用vector代替数组,并使用std::reverse函数检查vector是否相同。或者您可以将for循环修复为不提前返回,而是检查"前后"中的值是否不相同,如果您通过整个for循环则返回true。像这样:

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

剩下的由你来解决,但我想很多人已经为你指出了这些问题。好运!

一些注释(当你修复了问题的标记时):

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

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

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

因为你没有写任何东西,c++创建了一个默认的返回值,它的值为0。