如何在C

时间:2019-02-04 18:12:35

标签: c arrays merge duplicates

我的C程序的目的是获取两个数组(均由唯一的数字组成)并将它们两个合并为一个新的数组,从而消除两者之间相同的任何数字。但是,当我尝试合并两者时,它会打印回合并的两个数组,而不会消除任何重复项。

我的程序通过首先添加“ array_A”中的元素来创建“ array_C”。然后,它使用计数器变量检查“ array_B”和“ array_C”之间是否存在重复项。对于for循环检查的“ array_C”中的每个值,如果“ array_B”的值不等于“ array_C”中的值,则计数器减1。如果检查了“ array_C”中的所有值,则counter <= 0,表示“ array_C”中没有该值的重复项,应将其添加到“ array_C”的末尾。我使用“位置”变量对此进行跟踪。

        //Creation of array_C

        int length_C = length_A + length_B;
        int array_C[length_C];

        //Copying array_A to array_C

        for (i = 0; i < length_A; i++) {
          array_C[i] = array_A[i];
        }

        //Checking array_C against array_B for duplicates

        counter = length_A;
        int position = length_A;
        for (i = 0; i < length_B; i++) {
          for (j = 0; j < length_C; j++) {
            if (array_B[i] != array_C[j]) {
              counter--;
            } else {
              counter++;
            }
          }

          //this is the position tracker to add new value in array_C
          if (counter <= 0) {
            array_C[position] = array_B[i];
            position++;
          }
        }

如果我输入以下内容:

Enter the length of array 1: 6
Enter the elements of the array: 1 2 3 4 5 6
Enter the length of array 2: 6
Enter the elements of the array: 3 4 5 6 7 8

我希望结果应该像这样:

Here is the merged array:
1 2 3 4 5 6 7 8

但是,它看起来像这样:

1 2 3 4 5 6 3 4 5 6 7 8

显然,出了点问题,并且不了解它应该只添加不是重复的变量。

3 个答案:

答案 0 :(得分:1)

您的逻辑有缺陷。这就是为什么您得到意想不到的结果。请参见代码中的以下修订:

for (i = 0; i < length_B; i++) {
      int skip = 0;
      for (j = 0; j < length_C; j++) {
        if (array_B[i] == array_C[j]) {
          skip=1;
          break;
        } 
      }

      if(skip == 1) continue;
      array_C[position++] = array_B[i];
    }

答案 1 :(得分:1)

问题出在内部for循环内部的逻辑上。根据问题陈述,如果array_c的任何值与array_b的任何值都匹配,则应删除该值,否则将其添加到array_c。因此您可以简单地尝试执行以下操作。请确保您了解代码。如果您有任何疑问,请随时提问。

   for (i = 0; i < length_B; i++) {
      bool isExistInArrayC = false;
      for (j = 0; j < length_C; j++) {
        if (array_B[i] == array_C[j]) {
          isExistInArrayC = true;
          break;
        } 
      }

      //this is the position tracker to add new value in array_C
      if (isExistInArrayC == false) {
        array_C[position] = array_B[i];
        position++;
      }
    }

答案 2 :(得分:1)

这些建议当然会起作用,但是性能(尤其是大型阵列)的性能将非常差。从数组B添加整数时,我将维护一个排序的数组“ C”并对其进行二进制搜索。 您当然需要数组C的双向链接列表。