使用不同的函数比较回文

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

这将迭代你的数组的一半,将它与下半部分进行比较并退出即时一个值不等于它的镜像。

至于你代码中的错误,我或许可以指出一些比较明显的错误,以供日后参考:

  1. 调用参数数量不正确的函数。 示例:createReverseArray(MyArray1[5]).
  2. 调用传递整数代替数组作为参数。例子: MyArray[5]MyArray第六位的整数。
  3. 忽略范围并在不声明变量的情况下使用变量。示例:main 中的 ijcreateReverseArray 中使用。这不起作用。
  4. 比较一个整数和一个数组指针。示例:if(a[] == reverse)。无论您试图实现什么,这永远不会给您有用的结果。
  5. 在前向声明和实现中声明不同的函数。示例:void createReverseArray();int createReverseArray(int &a[], int n)。您应该使用相同的参数和 return 值声明它们,否则编译器将无法理解它们是同一回事。