删除数组中的重复项

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

# include # include 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; } 

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

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

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

 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++; 

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

另外,你永远不会增加scanf(“%d”,&arr [i]); 我想你想要读取scanf(“%d”,&arr [counter]);