如何在C中删除数组中的重复值?

时间:2014-05-26 13:03:09

标签: c arrays duplicate-removal

我想删除数组中的重复值。例如:数组[1,5, 6 ,1, 3 ,5, 9 ]我想要数组[6,3, 9]。
我写过这个,但我遇到了麻烦:

#include<stdio.h>
main() {
    int array[50], i, j, k=0, c=0, array2[50], n;
    printf("Enter array dimension: "); scanf("%d", &n);
    for (i = 0; i < n; i++) {
        printf("array[%d]= ", i); scanf("%d", &array[i]);
    }
    for (i = 0; i < n; ) {
        for (j = i + 1; j < n; j++) {
            if (array[i] == array[j])
                i++;
            else {
                array2[k++] = array[i];
                c++;
            }
        }
    }
    for (k = 0; k < c; k++) {
        printf("%d  ", array2[k]);
    }
    system("pause");
}

3 个答案:

答案 0 :(得分:3)

您应该首先在伪代码中描述您的问题,然后将其分解为更小的部分。

通过删除所有这些冗余变量从头开始,并尝试实现以下算法:

for each element in inputArray
   if not elementIsDuplicate(element)
      add to outputArray

这是一个for循环。 elementIsDuplicate是单独的功能。

现在尝试实现函数elementIsDuplicate。此函数还包含一个循环,接受输入参数(int* array, int n, int currentIdx)并返回10,指示currentIdx处的元素是否出现在数组中的任何其他位置。

答案 1 :(得分:1)

#include<stdio.h>

int main(){
    int array[50], i, j, k=0, c, n, array2[50] = {0};
    printf("Enter array dimension: "); scanf("%d", &n);
    for (i = 0; i < n; ++i){
        int num, dup = 0;
        printf("array[%d]= ", i); scanf("%d", &num);
        for(j = 0; j < k; ++j){
            if(array[j] == num){
                array2[j] = dup = 1;
                break;
            }
        }
        if(!dup){
            array[k++] = num;
        }
    }

    for (c=i=0; i < k; ++i){
        if(!array2[i])
            printf("%d ", array[c++] = array[i]);
    }
    printf("\n");
/*
    for(i=0;i<c;++i)
        printf("%d ", array[i]);
    printf("\n");
*/
    system("pause");
    return 0;
}

答案 2 :(得分:0)

#include<stdio.h>
main()
{
int n, a[50], b[50], count = 0, c, d;

printf("Enter number of elements in array\n");
scanf("%d",&n);

printf("Enter %d integers\n", n);
for(c=0;c<n;c++)
    scanf("%d",&a[c]);       //enter array elements

for(c=0;c<n;c++)
{
    for(d=0;d<count;d++)
    {
        if(a[c]==b[d])
            break;
    }
    if(d==count)
    {
        b[count] = a[c];
        count++;
    }
}
printf("count is: %d\n",count);
printf("Array obtained after removing duplicate elements\n");
for(c=0;c<count;c++)
    printf("%d\n",b[c]);
return 0;
}

这将从所需的数组中删除多个重复项。 示例:如果输入数组为:3 6 5 6 2 8 6 5 9 8 6 ,,那么输出数组将为:3 6 5 2 8 9