C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了从C中的数组中删除零条目大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个值数组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 %d\t",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 %d\t",x_upd[i] ); //
}

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

大佬总结

以上是大佬教程为你收集整理的从C中的数组中删除零条目全部内容,希望文章能够帮你解决从C中的数组中删除零条目所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。