删除数组中的重复数字

时间:2014-09-28 23:50:57

标签: c sorting duplicate-removal

#include <stdio.h>

int main()
{
    int array[8] = {4, 1, 5, 4, 2, 7, 4, 2};
    int i, j, k;
    int len = 8;

    for(i = 0; i < len; i++)
    {
        for(j = i + 1; j < len;)
        {
            if(array[j] == array[i])
            {
                for(k = j; k < len - 1; k++)
                {
                    array[k] = array[k + 1];
                }
                len--;
            }
            else
            {
                j++;
            }
        }

    for(i = 0; i < len; i++)
    {
        printf("%d ", array[i]);
    }
    printf("\n");
    }

    return 0;
}

您好,

上面是删除数组中重复数字的代码,但是在编译和执行时,我得到4 1 5 2 7 2 - 这是不对的,因为我应该得到4 1 5 2 7。

似乎我遇到了len的问题,但无法弄清楚代码中的具体位置和内容需要修复。

1 个答案:

答案 0 :(得分:1)

不知道缩进是否是错误,或者您错过了从某处复制代码?

无论如何要让它运行,进行这些微小的改动并运行(不要指望我怀疑你不需要它的解释)

#include <stdio.h>

int main()
{
    int array[8] = {4, 1, 5, 4, 2, 7, 4, 2};
    int i, j, k;
    int len = 8;

    for(i = 0; i < len; i++)
    {
        for(j = i + 1; j < len;)
        {
            if(array[j] == array[i])
            {
                for(k = j; k < len - 1; k++)
                {
                    array[k] = array[k + 1];
                }
                len--;
            }
            else
            {
                j++;
            }
        }

    } // close the main `for` loop


    // you used to print out after each iteration!
    for(i = 0; i < len; i++)
    {
        printf("%d ", array[i]);
    }
    printf("\n");


    return 0;
}