C程序 查找两个数组之间的共同数组元素

  • Post category:C

C程序 查找两个数组之间的共同数组元素

本程序实现了查找两个数组之间的共同数组元素,使用时需要输入两个数组,并输出它们之间相同的元素(去重)。

使用说明

  1. 下载源代码文件 common_elements.c
  2. 编译源代码,生成可执行文件。在命令行窗口中进入源代码所在目录,执行以下命令:

    gcc common_elements.c -o common_elements

  3. 执行可执行文件,并输入两个数组。可执行文件的命令格式为:

    ./common_elements array1_size array1_values array2_size array2_values

    其中,array1_sizearray2_size 分别表示两个数组的长度;array1_valuesarray2_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;
}