C++ 关于判断两个数组(一维)对应的元素完全相同的函数

#include<iostream>
using namespace std;

bool If_Prn_Same(int a[],int b[]) //判断两数组对应的元素(无重复是否全部相同
{
int i,j,p=0,m,n;
m=sizeof(a)/sizeof(int);
n=sizeof(b)/sizeof(int);
cout<<m<<n<<endl;
if(m!=n)
return false;
else
{
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
if(b[j]==a[i])
p++;

}
}

}
cout<<p<<endl;
if(p!=m)
return false;
else
return true;

}

void main()
{

int a[]={2,1,4,3};
int b[]={1,3,2,4};

bool work=If_Prn_Same(a,b) ;
cout<<work<<endl;
if(work)
cout<<"相同"<<endl;
else
cout<<"不相同"<<endl;
}

源程序如上,目的很明确,但为什么输出结果老是错误的

话说,一个函数就搞定的strcpm(str1,str2);你这么麻烦还。
而且你的程序有问题。先从开始说,你在函数参数传参数的时候,就做了不必要的拷贝浪费了内存
bool If_Prn_Same(int* a,int* b)这样传地址就能省内存。在说程序的逻辑部分,你那个循环是在干嘛啊大哥!为什么要嵌套循环呢?你再想想,比较两个字符串是不是这两个字符串的字符个数相等是前提呢?那为什么不在循环中比较a[i]和b[i]呢?还嵌套循环导致错误了。追问

大哥你没明白意思啊,我的意思是两个判断两个数组对应的元素是否全部相同,但不一定要一一对应,比如说int a[]={2,1,4,3}; int b[]={1,3,2,4};,这两个就满足要求,虽然元素没有一一对应
,但里面的元素确实相同,而且你说的strcpm是比较两字符串长度的

追答

strcmp是判断两个字符串是不是相同的。原来你这干这个的啊。
哦,那你的代码这这个部分出错了:
m=sizeof(a)/sizeof(int);
n=sizeof(b)/sizeof(int);
你要求的应该是sizeof ( 数组指针名)不应该除以sizeof(int)。因为你要求的是数组长度。

追问

大哥,不好意思,试了还是不行,sizeof(a)/sizeof(int)表示数组a的元素个数,我要得到的就是这个,你说的sizeof(a)表示数组a的长度,上面给出a四个元素凑巧可以,如果换做5个元素就又不行了,哎,不知道问题出在哪儿

追答

可以比较int数组长度哦亲。c是弱类型的。强转就行。我请问你 ,sizeof()运算符号是按什么计算的?我看你是需要去把基础打牢固点了。sizeof是俺类型算的。你的a是一个int型数组,也就是一个指向一块数据的指针。你球他的类型的话,他就会追寻这个类型的结尾,返回这块内存的占用字节数。这个a指针指向了四个相连的数据。当sizeof追寻这个数据块的到,将内存的计数差值返回。不信可以去看c库函数的源码。这样sizeof(a)返回4.你在除以sizeof(int)这个返回对应cpu整值对齐的长度的值。32位是4,64位是8.这样,你的到的结果用一个int型的数据一接就成了1.你想要的是4,得到确是1.还对吗?
另外说指针。假如一个函数,让你传入一个参数,可以代表任意类型,然后对这个数值可以随意操作。完成后返回一个需要的类型,你怎么设计?
c语言是弱类型语言,这是他的缺点也是他的优点。利用他的优点我们可以把任意的数据类型强制转换成任意比他长度大的类型。以为本质都是内存的占用。那么void* 就是任意类型了。可以根据需要转换成任意类型。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-03-18
#include <iostream>

using namespace std;

bool If_Prn_Same(int a[], int x, int b[], int y); //判断两数组对应的元素(无重复是否全部相同)

int main(void)
{
int a[] = { 2, 1, 4, 3 };
int b[] = { 1, 3, 2, 4 };
int x = sizeof(a) / sizeof(int);
int y = sizeof(b) / sizeof(int);
bool work = If_Prn_Same(a, x, b, y);
cout << x << endl;
cout << y << endl;
if (work)
{
cout << "相同" << endl;
}
else
{
cout << "不相同" << endl;
}
return 0;
}
//判断两数组对应的元素(无重复是否全部相同)
bool If_Prn_Same(int a[], int x, int b[], int y)
{
if (x < y)
{
for (int i = 0; i < x; ++i)
{
if (a[i] != b[i])
{
return false;
}
}
return true;
}
else
{
for (int i = 0; i < y; ++i)
{
if (a[i] != b[i])
{
return false;
}
}
return true;
}
}
第2个回答  2012-03-17

楼上正解 m=sizeof(a);

n=sizeof(b);

本回答被网友采纳