整数数组回文检查器
integar array palindrome checker
我制作了这个程序来创建一个函数来检查整数数组是否是回文或者 not.it 总是给出输出,它不是每个输入的回文。你能帮帮我吗?
代码:
#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::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;
}
}
而且我们也可以避免vector的拷贝,用反向迭代器:
#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;
}
}
我制作了这个程序来创建一个函数来检查整数数组是否是回文或者 not.it 总是给出输出,它不是每个输入的回文。你能帮帮我吗? 代码:
#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::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;
}
}
而且我们也可以避免vector的拷贝,用反向迭代器:
#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;
}
}