首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用C语言从数组中删除重复项

使用C语言从数组中删除重复项
EN

Stack Overflow用户
提问于 2019-06-17 21:33:28
回答 2查看 87关注 0票数 2

从排序的数组中删除重复项

代码语言:javascript
运行
复制
#include <stdio.h>
#include <stdlib.h>

int main() {
    int arr[12] = { 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5 };
    int temp[12];
    int i, j, k, n = 12;

    for (i = 0; i < n - 1; i++) {
        if (arr[i] != arr[i + 1]) {
            temp[j] = arr[i];
            j++;
        }
    }

    temp[j] = arr[n - 1];

    for (k = 0; k <= j; k++) {
        printf("%d\n", temp[k]);
    }

    return 0;
}

输出:

代码语言:javascript
运行
复制
6356652
1955753237
1956070172
6356716
1955750536
8
1955687363
1955687354
1
2
3
4
5

Process returned 0 (0x0)   execution time : 0.014 s
Press any key to continue.

我不希望将这些数字打印出来:

代码语言:javascript
运行
复制
6356652
1955753237
1956070172
6356716
1955750536
8
1955687363
1955687354
EN

回答 2

Stack Overflow用户

发布于 2019-06-17 22:04:38

您没有初始化变量j。所以使用未初始化的变量会调用未定义的行为。

最好在一个循环中形成不重复的数组,而不是将循环拆分成一个循环,然后在循环之后再创建一条语句。

例如,您可以按照演示程序中所示的方式编写一个单独的函数。

代码语言:javascript
运行
复制
#include <stdio.h>

size_t remove_copy( const int a[], int b[], size_t n )
{
    size_t j = 0;

    for ( size_t i = 0; i < n; i++ )
    {
        if ( i == 0 || a[i] != b[j-1] ) b[j++] = a[i];
    }

    return j;
}

int main(void) 
{
    int a[] = { 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5 };
    int b[sizeof( a ) / sizeof( *a )];
    const size_t N = sizeof( a ) / sizeof( *a );

    for ( size_t i = 0; i < N; i++ ) printf( "%d ", a[i] );
    putchar( '\n' );

    size_t n = remove_copy( a, b, N );

    for ( size_t i = 0; i < n; i++ ) printf( "%d ", b[i] );
    putchar( '\n' );

    return 0;
}

程序输出为

代码语言:javascript
运行
复制
1 2 2 3 3 3 4 4 4 4 5 5 
1 2 3 4 5 
票数 4
EN

Stack Overflow用户

发布于 2019-06-27 18:36:57

您的代码和逻辑是正确的。但是你犯了一个错误,没有初始化j = 0。因此,你得到了一些胡言乱语的值。因此,我更正并执行了它,并得到了正确的答案。

代码语言:javascript
运行
复制
#include <stdio.h>

int main() {
    int arr[12] = { 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5 };
    int temp[12];
    int i, j = 0, k, n = 12;

    for (i = 0; i < n - 1; i++) {
        if (arr[i] != arr[i + 1]) {
            temp[j] = arr[i];
            j++;
        }
    }

    temp[j] = arr[n - 1];

    for (k = 0; k <= j; k++) {
        printf("%d\n", temp[k]);
    }

    return 0;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56632433

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档