如何从C中的数组中删除一个元素?
How to delete an element from an array in C?
我试过向后移动元素,但它并没有使数组完全变空。
for(i=pos;i<N-count;i++)
{
A[i]=A[i+1];
}
实际上,我必须测试输入数组中的键值,如果键值存在于数组中,那么我必须将其从数组中删除。当数组变空时,循环应该终止。这里的“计数”表示找到并删除键值之前的次数。并且,“pos”表示要删除的元素的位置。我认为动态内存分配可能会有所帮助,但我还没有学会。
根据您的描述和代码,“删除”可能是指移动值以删除给定元素并通过减少总数来缩短列表。
在您的示例中,pos
和 count
会 be/should 相似(相差 1?)。
您的 for
循环的限制不是 N - count
。是N - 1
那么,你想要:
for (i = pos; i < (N - 1); i++) {
A[i] = A[i + 1];
}
N -= 1;
要进行常规删除,给定一些条件(匹配要删除的元素的 function/macro,例如下面的 match_for_delete
),您可以在单遍数组:
int isrc = 0;
int idst = 0;
for (; isrc < N; ++isrc) {
if (match_for_delete(A,isrc,...))
continue;
if (isrc > idst)
A[idst] = A[isrc];
++idst;
}
N = idst;
我试过向后移动元素,但它并没有使数组完全变空。
for(i=pos;i<N-count;i++)
{
A[i]=A[i+1];
}
实际上,我必须测试输入数组中的键值,如果键值存在于数组中,那么我必须将其从数组中删除。当数组变空时,循环应该终止。这里的“计数”表示找到并删除键值之前的次数。并且,“pos”表示要删除的元素的位置。我认为动态内存分配可能会有所帮助,但我还没有学会。
根据您的描述和代码,“删除”可能是指移动值以删除给定元素并通过减少总数来缩短列表。
在您的示例中,pos
和 count
会 be/should 相似(相差 1?)。
您的 for
循环的限制不是 N - count
。是N - 1
那么,你想要:
for (i = pos; i < (N - 1); i++) {
A[i] = A[i + 1];
}
N -= 1;
要进行常规删除,给定一些条件(匹配要删除的元素的 function/macro,例如下面的 match_for_delete
),您可以在单遍数组:
int isrc = 0;
int idst = 0;
for (; isrc < N; ++isrc) {
if (match_for_delete(A,isrc,...))
continue;
if (isrc > idst)
A[idst] = A[isrc];
++idst;
}
N = idst;