从C数组中删除重复的数字

时间:2013-07-25 16:30:48

标签: c

我在main()

的某个点上调用了这个void函数
void calc(int dim){

 int a[dim],i,j,temp;

 for(int i=0;i<dim;i++)
  {
   printf("\n\n Type a number - [%d/%d]: \t",i+1,dim);
   scanf("%d", &a[i]);       
  }

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

   for(j=i+1;j<dim;j++) {

    if(a[i]==a[j])
    {
     continue;    
    }

    else
      {
       temp=a[i];
       a[i]=a[j];
       a[j]=temp;
       printf("%d", a[j]);
      }
    }
  }

  for(i=0;i<dim;i++)
   printf("%d", a[i]);
}

输入参数dim是数组的维度。您看到的代码完美无缺,因为它会对数组中的数字进行排序。

如果用户键入4 5 8 7 5作为输入数字,我想要输出如下:8 7 5 4.我必须删除重复的数字,所以我想:

if(a[i]==a[j])
    {
     continue;    
    }

顺便说一下输出仍然是8 7 5 5 4.我怎么能解决这个问题?

2 个答案:

答案 0 :(得分:3)

当您发现副本时,您需要“删除”它。您应该将列表中的最后一项移动到当前位置(a[j]),然后递减dim

你需要考虑如何将可能修改的维度返回给调用代码,但是你也遇到了其他代码如何获得函数本地数组的问题。

答案 1 :(得分:-1)

您正在检查之前移动号码。这就是你错过它的原因。我建议先对它们进行排序,然后再检查重复项(current == prev)。也许其他技术也可以。