C程序 查找两个数组之间的共同数组元素
本程序实现了查找两个数组之间的共同数组元素,使用时需要输入两个数组,并输出它们之间相同的元素(去重)。
使用说明
- 下载源代码文件
common_elements.c
。 -
编译源代码,生成可执行文件。在命令行窗口中进入源代码所在目录,执行以下命令:
gcc common_elements.c -o common_elements
-
执行可执行文件,并输入两个数组。可执行文件的命令格式为:
./common_elements array1_size array1_values array2_size array2_values
其中,
array1_size
和array2_size
分别表示两个数组的长度;array1_values
和array2_values
分别表示两个数组的元素值,以空格分隔。例如,输入以下命令:
./common_elements 5 1 2 3 4 5 3 4 5 6 7
表示第一个数组为 {1, 2, 3, 4, 5},第二个数组为 {3, 4, 5, 6, 7},程序将输出两个数组之间相同的元素(去重),结果为:
Common elements: 3 4 5
示例说明
示例1
输入以下命令:
./common_elements 3 1 2 3 2 3 4
输出结果为:
Common elements: 2 3
示例2
输入以下命令:
./common_elements 4 1 2 3 4 3 4 5 6
输出结果为:
Common elements: 3 4
源代码
#include <stdio.h>
#include <stdlib.h>
int cmp(const void *a, const void *b)
{
return *(int *)a - *(int *)b;
}
int main(int argc, char *argv[])
{
int i, j;
int array1_size = atoi(argv[1]);
int array2_size = atoi(argv[3]);
int *array1_values = malloc(array1_size * sizeof(int));
int *array2_values = malloc(array2_size * sizeof(int));
int count = 0;
int *result = malloc(array1_size * sizeof(int));
for (i = 0; i < array1_size; i++) {
array1_values[i] = atoi(argv[i+2]);
}
for (i = 0; i < array2_size; i++) {
array2_values[i] = atoi(argv[i+4+array1_size]);
}
qsort(array1_values, array1_size, sizeof(int), cmp);
qsort(array2_values, array2_size, sizeof(int), cmp);
for (i = 0, j = 0; i < array1_size && j < array2_size;) {
if (array1_values[i] < array2_values[j]) {
i++;
} else if (array1_values[i] > array2_values[j]) {
j++;
} else {
if (count == 0 || array1_values[i] != result[count-1]) {
result[count] = array1_values[i];
count++;
}
i++;
j++;
}
}
printf("Common elements:");
for (i = 0; i < count; i++) {
printf(" %d", result[i]);
}
printf("\n");
free(array1_values);
free(array2_values);
free(result);
return 0;
}