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
放在哪里。什么时候是回文?
您编辑的回复存在一些问题:
只要前面的值与后面的值相同,您 return 就为真。如果您有一个数组 {1,2,3,5,6,8,7,8,9,1}
,您的函数将 return 为真,因为数组的前后都有一个 1
。
你 return -2 而不是函数中的 false return 是一个布尔值。
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;
`
其余问题由您解决,但我认为很多人已经为您确定了这些问题。祝你好运!
我在笔记中遇到了这个问题:给定一个整数数组,编写一个函数来检查该数组中的元素是否为回文。我一直在研究我的代码看起来像这样:
#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
放在哪里。什么时候是回文?
您编辑的回复存在一些问题:
只要前面的值与后面的值相同,您 return 就为真。如果您有一个数组
{1,2,3,5,6,8,7,8,9,1}
,您的函数将 return 为真,因为数组的前后都有一个1
。你 return -2 而不是函数中的 false return 是一个布尔值。
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;
`
其余问题由您解决,但我认为很多人已经为您确定了这些问题。祝你好运!