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

从C中的数组中删除零条目,第1张

概述我有一个值数组x = {0,0,1,2,3,0,0,7,8},我想用C删除条目. 尝试: 我试图循环遍历数组中的每个值,并检查条目是否不等于零.如果这个条件为真,那么我试图用原始数组值填充一个新数组. #include <stdio.h>#include <stdlib.h>#include <string.h>int main() { int x[] = { 0, 0, 1, 我有一个值数组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中的数组中删除零条目所遇到的程序开发问题。

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1224051.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存