首页 > 解决方案 > 如何从c中的数组中删除一系列元素

问题描述

我需要从数组中删除一系列元素,但我不知道如何。我尝试了这个 for 循环,其中 start 是范围的开始,end 是范围的结束。

for (i=0;i<n;i++){
a1[start+i] = a1[end+i+1];;
}

标签: carrays

解决方案


从数组中删除一系列元素

在 C 中,一旦定义了数组,元素的范围就固定了。它们不能被删除@海德


代码可以在运行时重新分配元素值。

有了一个数组[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];;
}

这仍然将数组的后半部分保留为原始值。


推荐阅读