C の文字列の配列と、配列内の文字列の数を示す整数があります。
char *strarray[MAX];
int strcount;
この配列では、最も高いインデックス (10 は 0 より大きい) が最後に追加された項目であり、最も低いインデックスが追加された最も遠い項目です。配列内の項目の順序は重要です。
配列の重複をチェックし、最も高いインデックスの duplicate 以外をすべて削除し、配列を折りたたむ簡単な方法が必要です。
例えば:
strarray[0] = "Line 1";
strarray[1] = "Line 2";
strarray[2] = "Line 3";
strarray[3] = "Line 2";
strarray[4] = "Line 4";
次のようになります。
strarray[0] = "Line 1";
strarray[1] = "Line 3";
strarray[2] = "Line 2";
strarray[3] = "Line 4";
元の配列のインデックス 1 が削除され、インデックス 2、3、および 4 が下にスライドしてギャップを埋めました。
どうすればいいのか、ひとつ考えがあります。それはテストされておらず、現在コーディングしようとしていますが、私のかすかな理解から、これは恐ろしいアルゴリズムであると確信しています.
以下に示すアルゴリズムは、新しい文字列が strarray に追加されるたびに実行されます。
私が試みていることを示すために、私が提案したアルゴリズムを以下に含めます。
- strarray 全体を検索して str に一致するものを探します
- 一致しない場合は何もしない
- 一致が見つかった場合、str を strarray に入れます
- これで、最大 1 つの重複エントリを持つ strarray ができました
- 最大インデックス strarray 文字列を一時文字列配列の最小インデックスに追加します
- 下方向に strarray に進み、各要素を確認します
- 重複が見つかった場合はスキップします
- そうでない場合は、一時文字列配列の次に高いインデックスに追加します
- 一時的な文字列配列を反転し、strarray にコピーします
繰り返しますが、これはテストされていません (現在実装中です)。誰かがもっと良い解決策を持っていることを願っています。
項目の順序は重要であり、コードは (C++ ではなく) C 言語を使用する必要があります。最下位のインデックスの重複を削除し、単一の最上位のインデックスを保持する必要があります。
ありがとうございました!