消除非有序数组中的重复元素

时间:2018-03-26 11:53:59

标签: c pointers dynamic-memory-allocation

写下这个功能: int different(int input [],int size,int ** vetout); 给定具有维度大小的整数数组输入时,在动态内存中创建一个向量,该向量包含重复输入一次的所有输入元素。函数不同返回修改后的数组的大小。 我的问题是,当我编译程序时,我得到了分段错误错误。任何人都可以帮助我。

 #include<stdio.h>
 #include<stdlib.h>

int different(int input[],int size, int **vetout);

int main(){
    int input[]={1,1,2,3,4,4,1,2,3,4};
    int size=10; int n; int i; int *vetout;
    n = different(input, size, &vetout);
    printf("The size is : %d", n);
    for(i=0;i<n;i++){printf("The array is : %d",vetout[i]);}
    return 0;
}

int different(int input[],int size, int **vetout){
    int i=0;int j,k;
    while(i<size){
        j=i+1;
        while(j<size){
            if(input[i]==input[j]){
                for(k=j;k<=size;k++){
                    input[k]=input[k+1]; size--;
                }
            }
            j++;
        }
        i++;
    }

    *vetout=(int *)malloc(sizeof(int)*size);
    printf("The size is : %d",size);
    for(i=0;i<size;i++){*vetout[i]=input[i];}

    return size;
}

1 个答案:

答案 0 :(得分:1)

我修改了您的功能,随意将其作为基础使用 - 这不是您问题的最佳解决方案 - 这些评论在原始实现中覆盖了您的问题

希望这可以作为指南

int different(int input[],int size, int **vetout){

    int count = 0;
    int found, i, j;
    *vetout = malloc(sizeof(int)*size);

    for ( i=0; i<size ; i++ ) {
        // this loop will iterate on each element of the array
        // and check if it was already listed
        found = 0;
        for ( j=0; j < count ; j++ ) {
            //this loop checks if the value was already set in the output vector
            if ( *(*vetout+j) == input[i] ) {
                found = 1;
            }
        }

        //if it was not set - then set it and increse the index 'count'
        if ( !found )
        {
            *(*vetout+ (count++)) = input[i];
        }
    }

    printf("The size is : %d\n", count);

    return count;
}