0

配列から char を削除しようとしていますが、問題が発生しています。数字でそれを行う方法を読みましたが、私にとっては機能しないため、文字の削除とは異なるようです。

次の配列がある場合:

char stuff[][20] = {"one", "two", "three", "four", "five"};     

たとえば、要素「4」を削除するにはどうすればよいので、取得できますか

{"one", "two", "three", "five"};   
4

3 に答える 3

3

これを行うには、必要なすべてのメモリ (char* の配列と文字列用のメモリ) を動的に割り当てます。

次に、アイテムを削除せずに別の配列を作成し、残っているすべてのデータをコピーできます。最後に、元の配列と文字列を解放します。

少し複雑ですが、それほど難しくありません。リンクされたリストを作成できれば簡単かもしれませんが、これによりアプリケーションのロジックが少し変わる可能性があります。

于 2013-05-21T14:10:15.247 に答える
1

C では配列のサイズを変更できません。宣言されているように、stuff配列には常に 5 つの要素があります (各要素は の 20 要素の配列ですchar)。

できることは、5 番目の要素の内容を 4 番目の要素にコピーすることです。

strcpy(stuff[3], stuff[4]); // overwrites "four" with "five"

次に、5 番目の要素を空にします。

strcpy(stuff[4], ""); // zeros out the first element in the subarray

また

memset(stuff[4], 0, sizeof stuff[4]); // zeros out entire subarray

いずれにせよ、配列には文字列が含まれます

{ "one", "two", "three", "five", "" }

リスト内の要素の数を本当に変更したい場合(最後の要素を消去するだけでなく)、別の戦略を使用する必要があります。

このような問題は通常、連結リストと呼ばれるデータ構造を必要とします。リスト内の各要素は、次の要素を明示的に指しています。リンクされたリスト内の要素は、配列内よりもはるかに簡単に追加、削除、および並べ替えできます (配列はバッキング ストアとして使用できますが)。Web 上には、(さまざまな品質の) 例が多数あります。ただし、Sedgewick の「Algorithms in C」のコピーを見つけることができれば、それはより良いリソースになります。

于 2013-05-21T18:17:57.477 に答える