【发布时间】:2018-03-07 14:52:57
【问题描述】:
我一直在尝试编写 c 程序来查找两个数组之间的并集、交集和差异,虽然前两个结果很好,但我在找到两个数组之间的差异时遇到了一些麻烦。不同的是,我的意思是array1中的每个元素,而不是array2中的每个元素。
我希望第三个数组包含 array1 中不在 array2 中的每个元素,反之亦然。所以如果array1是[1,2,3],arr2是[3,4,5],那么arr3是[1,2]。如果两个数组的大小不同,我也不确定如何找到差异。
我的输出是一堆零和负数:
区别是:1
区别是:2
区别是:-14200
区别是:0
区别是:-14340
区别是:0
这是我一直在使用的代码:
#include <stdio.h>
int main()
{
int arr1[100];
int arr2[100];
int size1, size2, i, j, s=0;
//enter array size
printf("\nPlease enter array1 size: \n");
scanf("%d", &size1);
printf("\nPlease enter array2 size: \n");
printf("\n--------------------------- \n");
scanf("%d", &size2);
//setting up a third array to contain the difference
int tot_size = size1+size2;
int arr3[tot_size];
//enter array elements
for(i=0;i<size1;++i)
{
printf("\nPlease enter array1 element %d:\n", i);
scanf("%d", &arr1[i]);
}
printf("\n--------------------------- \n");
for(i=0;i<size2;++i)
{
printf("\nPlease enter array2 element %d:\n", i);
scanf("%d", &arr2[i]);
}
printf("\n--------------------------- \n");
//compare the two arrays, if two elements are not equal
//store them in a third array
for(i = 0; i < size1; i++)
{
for(j = 0; j < size2; j++)
{
if(arr1[i] != arr2[j])
{
arr3[s] = arr1[i];
++i;
++j;
++s;
}
}
}
for(i=0;i<s;++i)
printf("\nThe difference is: %d\n", arr3[i]);
}
任何帮助都将不胜感激,因为我是 C 新手,还有很多东西要学。
【问题讨论】:
-
定义“差异”。如果一个数组大于另一个数组会怎样?为什么要将整行与循环中的一个元素进行比较?
-
你的最后一个不应该去“tot_size”,而应该去“s”。另外,如果我理解正确,for 中的 if 条件是可疑的,因为它会为与 arr2[j] 不同的每个 arr1[i] 添加一个新的“差异”。如果 arr1 大小为 10,arr2 大小为 20,那么您将有 200 个可能性!
-
您是否也不想存储 arr2 值?
-
您好,感谢您的回复。不同之处在于:数组 1 中的每个元素,而不是数组 2 中的每个元素。所以我想要第三个数组中的元素。
-
我已编辑问题文本以包含差异定义,并说明两个不同大小数组的问题。
标签: c arrays array-difference