整数数组回文检查器
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<int>
而不是原始数组,它会起作用。在这里,您是在比较数组地址,而不是它们的内容。
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;
【讨论】:
以上是关于整数数组回文检查器的主要内容,如果未能解决你的问题,请参考以下文章