如何检查C中的数组重复

问题描述 投票:-1回答:3

我的C程序的目的是采取两个阵列(均包括唯一号码)并合并他们两个到一个新的数组,消除是两者之间的相同的任何数字。然而,当我尝试合并两个,它来代替打印回两个阵列组合,而不排除任何重复。

我的程序在从“array_A”的元素首先将创建“array_C”。然后,它会检查是否有使用计数器变量“array_B”和“array_C”之间重复。对于“array_C”每一个值的for循环检查,如果“array_B”值不等于“array_C”的值时,计数器加1。如果在“array_C”所有的值之后进行检查的降低,计数器<= 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

因此很明显,事情错了,它是不理解,它应该只添加不重复的变量。

c arrays merge duplicates
3个回答
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
投票

问题是里面你内心的循环逻辑。根据问题的陈述,如果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++;
      }
    }

1
投票

这些建议肯定会工作,但性能(尤其是大尺寸阵列)会非常差。我会保持一个有序数组“C”,做一个二进制搜索到它时,从阵列B加入整数你所需要的当然是列C双链表。

© www.soinside.com 2019 - 2024. All rights reserved.