C ++回文调试
我在笔记中遇到了这个问题:给定一个整数数组,写一个函数来检查该数组中的元素是否是palindromes。我一直在研究我的代码,它看起来像这样:
#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);
}
编辑后的回复有几个问题:
只要前面的值与后面的值相同,您就返回true。 如果你有一个数组{1,2,3,5,6,8,7,8,9,1}
你的函数会返回true,因为数组的前后有1
。
您在返回布尔值的函数中返回-2而不是false。
Main返回一个int值,并返回一个调用你的帮助器函数返回一个布尔值。
你可以做的是使用一个向量而不是数组,并使用std :: reverse函数来检查向量是否相同。 或者你可以修改你的for
循环来避免提前返回,而是检查这个值是否在“front and back”中不相同,如果你通过整个for循环,返回true。 像这样的东西:
` for (i = 0; i < middle; i++)
{
if (integers[i] != integers[length - 1 -i])
return false;
}
return true;
`
其余的是你要解决的问题,但我认为很多人已经为你确定了这些问题。 祝你好运!
一些评论(当你修改了你的问题的标记时):
main
期望你返回和int
,但你没有返回任何东西 false
? 返回类型是boolean
型的,所以它不能存储整型值。 return true
。 回文是什么时候? 在return
您的回文功能之前,您忘记了return
。
int main() {
int array[4] = {1,2,2,1};
into length = 4;
return yourPalindromeFunction( array, length );
}
因为你没有写任何东西,所以C ++创建了一个默认返回值为零。
链接地址: http://www.djcxy.com/p/86323.html