C言語で重複排除しつつ2つの配列を結合する方法

配列をマージして重複を取り除く方法はいくつかあります。以下はその一般的な方法の1つです。

  1. 結合後の結果を入れる配列を新たに分ける。
  2. まず、最初の配列の要素を逐次新しい配列にコピーします。
  3. 2つ目の配列を反復処理し、要素が新しい配列に既にあるかどうかを判断します。新しい配列に要素がない場合は、要素を新しい配列にコピーします。
  4. 統合後の重複を削除した新しい配列が最後に出力されます。

サンプルコードを示します。

#include <stdio.h>

#define MAX_SIZE 100

void mergeAndRemoveDuplicates(int arr1[], int size1, int arr2[], int size2, int mergedArr[], int *mergedSize) {
    int i, j, k;
    
    // 复制第一个数组中的元素到新数组
    for (i = 0; i < size1; i++) {
        mergedArr[i] = arr1[i];
    }
    *mergedSize = size1; // 合并后的数组大小
    
    // 遍历第二个数组
    for (i = 0; i < size2; i++) {
        int isDuplicate = 0;
        // 判断当前元素是否已存在于新数组中
        for (j = 0; j < *mergedSize; j++) {
            if (arr2[i] == mergedArr[j]) {
                isDuplicate = 1;
                break;
            }
        }
        // 若不存在则将其复制到新数组中
        if (!isDuplicate) {
            mergedArr[*mergedSize] = arr2[i];
            (*mergedSize)++;
        }
    }
}

int main() {
    int arr1[] = {1, 2, 3, 4, 5};
    int size1 = sizeof(arr1) / sizeof(arr1[0]);
    
    int arr2[] = {4, 5, 6, 7, 8};
    int size2 = sizeof(arr2) / sizeof(arr2[0]);
    
    int mergedArr[MAX_SIZE];
    int mergedSize;
    
    mergeAndRemoveDuplicates(arr1, size1, arr2, size2, mergedArr, &mergedSize);
    
    printf("合并并去重后的数组:");
    for (int i = 0; i < mergedSize; i++) {
        printf("%d ", mergedArr[i]);
    }
    printf("\n");
    
    return 0;
}

実行結果:

合并并去重后的数组:1 2 3 4 5 6 7 8
bannerAds