我已經嘗試向后移動元素,但它并沒有使陣列完全為空。
for(i=pos;i<N-count;i )
{
A[i]=A[i 1];
}
實際上,我必須測驗輸入陣列中的鍵值,如果鍵值存在于陣列中,那么我必須將其從陣列中洗掉。當陣列為空時,應該終止回圈。這里的“count”表示在找到并洗掉鍵值之前的次數。并且,“pos”表示要移除的元素的位置。我認為動態記憶體分配可能會有所幫助,但我還沒有學會。
uj5u.com熱心網友回復:
從您的描述和代碼中,“洗掉”可能是指移動值以洗掉給定元素并通過減少總數來縮短串列。
在您的示例中,pos并且count應該/應該是相似的 (off by 1?) 。
您的回圈的限制for不是N - count. 它是N - 1
所以你要:
for (i = pos; i < (N - 1); i ) {
A[i] = A[i 1];
}
N -= 1;
要進行一般洗掉,給定一些標準(匹配要洗掉的元素的函式/宏,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;
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/431188.html
下一篇:C-無法釋放分配的結構
