C - 没有重复的复制数组

时间:2018-04-16 05:14:45

标签: arrays for-loop nested copy

出于学习目的,我试图将一个数组复制到一个新的空数组 - 浏览重复项,我的逻辑是嵌套的for循环将检查重复项,当它找到一个时它将跳过它“'父母的反击。

然而,结果数组始终是原始数组的最后一个数字,重复N次。

编辑:程序应该使用未排序的数组,并且重复项不连续。

请帮助

完整代码:

#include <stdio.h>
int main() {
int array[10]={1,2,3,3,5,6,7,8,9,10};
int arrayB[10];
int i=0;
int j=0;
int lengthB=10;

// routine for copying array without duplicates
for (i=0;i<10;i++) {
    for(j=0;j<=i;j++){

             if (array[i]==arrayB[j]) {
             lengthB--;
             i++;                  
        }
             else{
             arrayB[j]=array[i];
             }
        }

}        
//display copied array:
printf("\n");
for(i=0;i<lengthB;i++)
printf("%d\t",arrayB[i]);

return 0;
}

1 个答案:

答案 0 :(得分:0)

  

然而,结果数组始终是原始数组的最后一个数字,重复N次。

这是因为这部分代码:

data

当我达到10时,如果你仔细观察“其他”字样,你将把数字10从索引0填充到9(数字10)。条款。

考虑到每次查看原始数组中的数字时都不需要从j = 0循环,并且可以在原始数组本身中识别复制,请尝试这样做(替换两条注释之间的所有内容) :

for(j=0;j<=i;j++){

         if (array[i]==arrayB[j]) {
         lengthB--;
         i++;                  
    }
         else{
         arrayB[j]=array[i];
         }
    }
}

回答您的编辑:

试试这个:

for (i=0;i<10;i++) {
  while(array[i+1] == array[i]){
    i++;
    lengthB--;
  }
  arrayB[j] = array[i];
  j++;
}   

如果重复项可以在任何地方发生,那么每当从原始数组中复制新数字时,都必须从新数组的开头检查重复项。

引入了新的迭代器(k),以及一个标志变量(isDuplicate)。这可能不是最好的解决方案,但仍有效。