我需要编写一个程序来检查两个数组是否相等,这意味着array1中的元素都在array2中。元素可能位于不同的行和列中,但第一个数组中的所有元素都需要位于第二个数组中。我写了下面的代码:
#include <stdio.h>
int fun(int m, int tab1[][m], int tab2[][m], int n)
{
int i, j, k, p, itis = 0;
if(itis == 0)
{
for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
{
int elem = tab2[i][j];
for(k=0; k<n; k++)
{
for(p=0; p<m; p++)
{
if(tab1[k][m] == elem)
{
itis = 1;
}
}
}
}
}
}
return itis;
}
int main()
{
int tab1[][3] = {{1,2,3}, {4,5,6}, {7,8,9}};
int tab2[][3] = {{7,8,9}, {1,2,3}, {4,5,6}};
int tab3[][3] = {{0,0,0}, {0,0,0}, {0,0,1}};
int tab4[][3] = {{7,8,9}, {1,2,3}, {4,5,0}};
printf("%d\n", fun(3, tab1, tab4, 3));
return 0;
}
如果第一个数组中的所有元素都存在于第二个数组中,则我的函数应该返回1(可以按不同的顺序 - 行/列)。但是对于tab1
和tab4
,我获得了1
,而不是0
。 (在tab1
中有6个,但6个不在tab4
中。有什么想法吗?
答案 0 :(得分:1)
int fun(int m, int tab1[][m], int tab2[][m], int n){
int *element1 = &tab1[0][0];//top element
int *endp1 = element1 + n*m;//end element
int *element2 = &tab2[0][0];
int *endp2 = element2 + n*m;
int itis = 0, *p;
for(;element1 != endp1; ++element1){
itis = 0;
for(p = element2; p != endp2; ++p){
if(*p == *element1){
itis = 1;//found!
break;
}
}
if(itis==0)//not found
return itis;//0
}
return itis;//1: all exist
}