出于学习目的,我试图将一个数组复制到一个新的空数组 - 浏览重复项,我的逻辑是嵌套的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;
}
答案 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)。这可能不是最好的解决方案,但仍有效。