我需要从数组中删除一系列元素,但我不知道如何删除。 我尝试了这个 for 循环,其中 start 是范围的开始,end 是范围的结束。
for (i=0;i<n;i++){
a1[start+i] = a1[end+i+1];;
}
最佳答案
to remove a range of elements from an array
在 C 语言中,一旦定义了数组,元素的范围就固定了。它们无法删除。 @hyde
<小时/>代码可以在运行时重新分配元素值。
使用数组[1,2,3,4,5,6,7]
,我们想要“删除”[3,4,5]
并且然后最终得到[1,2,6,7, x, x, x]
。这里x
需要是某个值,也许是0。
size_t start; // Array index of sub-range beginning to "remove"
size_t end; // Array index of sub-range end to "remove"
size_t n = sizeof a1/sizeof a1[0]; // Number of elements in the array
assert(start < n && end < n && start <= end);// Make certain we have sane input
size_t n_move = end - start + 1; // Number of elements to move
memmove(&a1[start], &a1[end + 1], sizeof a1[0]*n_move);
size_t n_clear = n - end; // Number of elements to zero
memset(&a1[end + 1], 0, sizeof a1[0]*n_clear);
<小时/>
OP 代码对于 n
是什么有疑问?
我期望循环迭代计数为 end - start + 1
。
sub_range_count = end - start + 1;
for (i=0; i<sub_range_count; i++){
a1[start+i] = a1[end+i+1];;
}
这仍然使数组的后面部分保留原始值。
关于c - 如何从c中的数组中删除一系列元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52318956/