使用不同的函数比较回文
Comparing palindromes using different functions
我正在尝试调用这些函数,以便打印出数组是否为回文。请告诉我我做错了什么;看来我没有正确传递参数。如果 post 有误,请告诉我;我是该网站的新手。
输出应该是这样的:
这是我的输出结果:
这是我的代码:
#include <stdio.h>
void createReverseArray();
void printArray();
void compareArray();
int main()
{
int MyArray1[] = {1, 2, 3, 2, 1};
int MyArray2[] = {1, 2, 3, 4, 1};
int MyArray3[] = {1, 2, 3, 3, 2, 1};
int MyArray4[] = {1, 2, 3, 4, 2, 1};
int n = 5, i, j, n, temp;
createReverseArray(MyArray1[5]);
createReverseArray(MyArray2[5]);
createReverseArray(MyArray3[5]);
createReverseArray(MyArray4[5]);
compareArray(MyArray1[5]);
compareArray(MyArray2[5]);
compareArray(MyArray3[5]);
compareArray(MyArray4[5]);
printArray(MyArray1[5]);
printArray(MyArray2[5]);
printArray(MyArray3[5]);
printArray(MyArray4[5]);
}
int createReverseArray(int &a[], int n)
{
i = 0;
j = n - 1;
while(i<j) {
temp = a[i];
a[i] = a[j];
a[j] = temp;
i++;
j--;
}
return reverse = a[];
}
int compareArray(int &a[], int reverse)
{
if(a[] == reverse) {
printf("The array is a palindrome")
}
else {
return 0;
}
}
void printArray(&a[])
{
printf("Array elements are:%d", a[]);
compareArray(a[]);
}
我不确定,因为我对提供的代码有很多不确定性,但如果你的 objective 只是检测数组是否是回文,它非常简单,可以在单一功能:
bool isPalindrome(int[] list, int size)
{
for(int k = 0; k < size / 2 - 1; k++)
if(list[k] != list[size - k - 1])
return false;
return true;
}
这将迭代你的数组的一半,将它与下半部分进行比较并退出即时一个值不等于它的镜像。
至于你代码中的错误,我或许可以指出一些比较明显的错误,以供日后参考:
- 调用参数数量不正确的函数。
示例:
createReverseArray(MyArray1[5])
.
- 调用传递整数代替数组作为参数。例子:
MyArray[5]
是MyArray
第六位的整数。
- 忽略范围并在不声明变量的情况下使用变量。示例:
main
中的 i
和 j
在 createReverseArray
中使用。这不起作用。
- 比较一个整数和一个数组指针。示例:
if(a[] == reverse)
。无论您试图实现什么,这永远不会给您有用的结果。
- 在前向声明和实现中声明不同的函数。示例:
void createReverseArray();
和 int createReverseArray(int &a[], int n)
。您应该使用相同的参数和 return 值声明它们,否则编译器将无法理解它们是同一回事。
我正在尝试调用这些函数,以便打印出数组是否为回文。请告诉我我做错了什么;看来我没有正确传递参数。如果 post 有误,请告诉我;我是该网站的新手。
输出应该是这样的:
这是我的输出结果:
这是我的代码:
#include <stdio.h>
void createReverseArray();
void printArray();
void compareArray();
int main()
{
int MyArray1[] = {1, 2, 3, 2, 1};
int MyArray2[] = {1, 2, 3, 4, 1};
int MyArray3[] = {1, 2, 3, 3, 2, 1};
int MyArray4[] = {1, 2, 3, 4, 2, 1};
int n = 5, i, j, n, temp;
createReverseArray(MyArray1[5]);
createReverseArray(MyArray2[5]);
createReverseArray(MyArray3[5]);
createReverseArray(MyArray4[5]);
compareArray(MyArray1[5]);
compareArray(MyArray2[5]);
compareArray(MyArray3[5]);
compareArray(MyArray4[5]);
printArray(MyArray1[5]);
printArray(MyArray2[5]);
printArray(MyArray3[5]);
printArray(MyArray4[5]);
}
int createReverseArray(int &a[], int n)
{
i = 0;
j = n - 1;
while(i<j) {
temp = a[i];
a[i] = a[j];
a[j] = temp;
i++;
j--;
}
return reverse = a[];
}
int compareArray(int &a[], int reverse)
{
if(a[] == reverse) {
printf("The array is a palindrome")
}
else {
return 0;
}
}
void printArray(&a[])
{
printf("Array elements are:%d", a[]);
compareArray(a[]);
}
我不确定,因为我对提供的代码有很多不确定性,但如果你的 objective 只是检测数组是否是回文,它非常简单,可以在单一功能:
bool isPalindrome(int[] list, int size)
{
for(int k = 0; k < size / 2 - 1; k++)
if(list[k] != list[size - k - 1])
return false;
return true;
}
这将迭代你的数组的一半,将它与下半部分进行比较并退出即时一个值不等于它的镜像。
至于你代码中的错误,我或许可以指出一些比较明显的错误,以供日后参考:
- 调用参数数量不正确的函数。
示例:
createReverseArray(MyArray1[5])
. - 调用传递整数代替数组作为参数。例子:
MyArray[5]
是MyArray
第六位的整数。 - 忽略范围并在不声明变量的情况下使用变量。示例:
main
中的i
和j
在createReverseArray
中使用。这不起作用。 - 比较一个整数和一个数组指针。示例:
if(a[] == reverse)
。无论您试图实现什么,这永远不会给您有用的结果。 - 在前向声明和实现中声明不同的函数。示例:
void createReverseArray();
和int createReverseArray(int &a[], int n)
。您应该使用相同的参数和 return 值声明它们,否则编译器将无法理解它们是同一回事。