首页 > 解决方案 > 整数数组回文检查器

问题描述

我做了这个程序来创建一个函数来检查整数数组是否是回文。它总是给出输出,它不是每个输入的回文。你能帮帮我吗?代码:

#include<iostream>
using namespace std;
void  palindrome(int[],int[],int);
int main()
{
    int size=5;
    int array1[size];
    int array2[size];
    palindrome(array1,array2,size);
    
}
void  palindrome(int array1[],int array2[],int size)
{
    size=5;
    int l=0;
    cout<<"enter your array=";
    for(int i=0;i<size;i++)
    {
        cin>>array1[i];
        
    }
    for(int i=0;i<size;i++)
    {
        array2[i]=array1[size-i];
    }
    
    
    if(array1==array2)
    {
        cout<<"given array is palindrome.";
    }
    else{
        cout<<"given array is not palindrome.";
    }

    
}

标签: c++arraysuser-defined-functionspalindrome

解决方案


不能用 比较两个数组==,它只会比较数组的地址是否相等,所以不同的数组永远不相等,我们可以将其切换为std::equal

存在一个内存问题array2[i]=array1[size-i];,您将遇到缓冲区溢出。

这是您的代码稍作修改的版本:

#include <iostream>
using namespace std;
void palindrome(int[], int[], int);
int main() {
  int size = 5;
  int array1[size];
  int array2[size];
  palindrome(array1, array2, size);
}
void palindrome(int array1[], int array2[], int size) {
  size = 5;
  int l = 0;
  cout << "enter your array=";
  for (int i = 0; i < size; i++) {
    cin >> array1[i];
  }
  for (int i = 0; i < size; i++) {
    array2[i] = array1[size - i - 1];
  }

  if (std::equal(array1, array1 + size, array2, array2 + size)) {
    cout << "given array is palindrome.";
  } else {
    cout << "given array is not palindrome.";
  }
}

建议使用std::vector而不是 C 样式数组:

#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
void palindrome(int);
int main() {
  int size = 5;
  palindrome(size);
}
void palindrome(int size) {
  std::vector<int> vec(size);
  cout << "enter your array=";
  for (int i = 0; i < size; i++) {
    cin >> vec[i];
  }
  std::vector<int> rev_rec{vec.rbegin(), vec.rend()};

  if (vec == rev_rec) {
    cout << "given array is palindrome." << std::endl;
  } else {
    cout << "given array is not palindrome." << std::endl;
  }
}

我们也可以避免向量的复制,使用反向迭代器:

#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
void palindrome(int);
int main() {
  int size = 5;
  palindrome(size);
}
void palindrome(int size) {
  std::vector<int> vec(size);
  cout << "enter your array=";
  for (int i = 0; i < size; i++) {
    cin >> vec[i];
  }
  if (std::equal(vec.begin(), vec.end(), vec.rbegin(), vec.rend())) {
    cout << "given array is palindrome." << std::endl;
  } else {
    cout << "given array is not palindrome." << std::endl;
  }
}

推荐阅读