删除数组中的重复项

时间:2010-10-02 20:15:58

标签: c arrays

我制作了一个程序来删除数组中的重复项,但程序的if条件始终保持为真。 我明白了问题是什么,将arr [i]更改为arr [count]并通过malloc分配内存,但程序按原样打印数组而不删除重复项。

    # include<stdio.h>
    # include<stdlib.h>
    int count=0;
    void Delete(int *arr);
    void Search(int *arr);

    int main()
    {
    int i;
    int *arr;
    arr=(int*)malloc(sizeof(int));
    clrscr();
    printf("Enter array and press -1 to stop:\n");/*stops when -1 occurs*/
    for(count=0;    ;count++)/*count is the count of the numbers*/
    {
        scanf("%d",&arr[count]);
        realloc(arr,sizeof((int)+count));
        fflush(stdin);
        if(*(arr+count)==-1)/*This condition is never true.*/
        break;
    }
    Search(arr);
    for(i=0;i<count;i++)
    {
        printf("%d\t",arr[i]);
    }
    getch();
    return 0;
}

    Search(arr);
    for(i=0;i<count;i++)
    {
        printf("%d",&arr[i]);
    }
    getch();
    return 0;
}

2 个答案:

答案 0 :(得分:2)

要从数组中删除重复项,请创建一个方法:

  • 对数组进行排序
  • 计算唯一值
  • 创建一个具有唯一值大小的新数组
  • 当它们的值不同时,从1个数组开始应对另一个数组

要在c中使用quicksort,您需要比较器功能,如:

int comp(const void *x, const void *y) {
  return (*(int*)x - *(int*)y);
}

然后你可以用:

来调用它
qsort(array, 10, sizeof(int), comp);

要计算排序数组中的唯一项,请迭代数组,并执行以下操作:

if(sortedarray[i]!=sortedarray[i+1]) count++;

答案 1 :(得分:1)

你从未初次化arr。目前它只是一个指针,它没有实际限制,所以你可能会覆盖别的东西。

另外,你永远不会递增         的scanf( “%d”,&安培;常用3 [1]); 我想你想要读取scanf(“%d”,&amp; arr [counter]);