尝试:
我试图循环遍历数组中的每个值,并检查条目是否不等于零.如果这个条件为真,那么我试图用原始数组值填充一个新数组.
#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中的数组中删除零条目所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)