加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

从C中的数组中删除零条目

发布时间:2020-12-16 06:46:21 所属栏目:百科 来源:网络整理
导读:我有一个值数组x = {0,1,2,3,7,8},我想用C删除零条目. 尝试: 我试图循环遍历数组中的每个值,并检查条目是否不等于零.如果这个条件为真,那么我试图用原始数组值填充一个新数组. #include stdio.h#include stdlib.h#include string.hint main() { int x[] = {
我有一个值数组x = {0,1,2,3,7,8},我想用C删除零条目.

尝试:

我试图循环遍历数组中的每个值,并检查条目是否不等于零.如果这个条件为真,那么我试图用原始数组值填充一个新数组.

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

int main() {
    int x[] = { 0,8 };
    int i;
    int x_upd[100];
    for (i = 0; i < 9; i++) {
        if (x[i] != 0) {
            x_upd[i] = x[i]; // if true,populate new array with value
        }
    }
    for (i = 0; i < 9; i++) {
        printf(" Peak updated %dt",x_upd[i]); //
    }
    return 0;
}

输出没有根据需要给出值{1,8}.相反,我在以前的零位置获取垃圾值.

我在这里做错了什么建议?我需要其他声明吗?

解决方法

在C中已经存在这样的功能.它名为remove_copy.在C中,这样的功能可以看起来如下面的说明性程序中所示.

#include <stdio.h>

int * remove_copy(const int *in,size_t n,int *out,int value)
{
    for (size_t i = 0; i != n; i++)
    {
        if (in[i] != value) *out++ = in[i];
    }

    return out;
}

int main( void )
{
    int a[] = { 0,8 };
    int b[sizeof(a) / sizeof(*a)];
    const size_t N = sizeof(a) / sizeof(*a);

    int *last = remove_copy(a,N,b,0);

    for (int *first = b; first != last; ++first)
    {
        printf("%d ",*first);
    }

    putchar('n');

    return 0;
}

程序输出是

1 2 3 7 8

或者该函数可以返回复制值的数量

size_t remove_copy(const int *in,int value)
{
    size_t m = 0;

    for (size_t i = 0; i != n; i++)
    {
        if (in[i] != value) out[m++] = in[i];
    }

    return m;
}

至于你的代码,那么你需要使用一个额外的变量来保持索引在目标数组中.例如

int m = 0;

for ( i = 0; i < sizeof( x ) / sizeof( *x ); i++ )
{
    if ( x[i] != 0 )
    {
        x_upd[m++] = x[i]; // if true,populate new array with value
    }
}

for ( i = 0; i < m; i++ )
{
    printf(" Peak updated %dt",x_upd[i] ); //
}

实际上,第一循环对应于上面所示的第二功能实现.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读