整数数组回文检查器

Posted

技术标签:

【中文标题】整数数组回文检查器【英文标题】:integar array palindrome checker 【发布时间】:2021-05-25 08:18:45 【问题描述】:

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

#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.";
    

    

【问题讨论】:

使用std::vector&lt;int&gt;而不是原始数组,它会起作用。在这里,您是在比较数组地址,而不是它们的内容。 1.您无法将数组与==, 2 进行有意义的比较。参数是指针,而不是数组。在您最喜欢的 C++ 书籍中阅读有关数组的更多信息。 【参考方案1】:

==不能比较两个数组,它只会比较数组的地址是否相等,所以不同的数组永远不相等,我们可以切换到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_recvec.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;
  

【讨论】:

以上是关于整数数组回文检查器的主要内容,如果未能解决你的问题,请参考以下文章

回文检查器

为啥我的代码没有执行正确的答案/回文检查器 javascript

使回文检查器保持字符串索引超出范围错误的一半,如何解决?

如何检查一个数字是不是是回文?

如何检查字符串是不是以回文开头?

不使用向量、大小或其他参数的递归回文检查