"one two one three"
またはのような文字列があります"one|two|three|two"
。
C の文字列から繰り返される単語を削除するアイデア。
疑似コード:
hare=tortoise=str; /* let str = your starting string. */
while (hare != NULL):
if !(been_seen(current_word(hare))):
word_copy(tortoise, hare);
advance_to_next_word(hare);
advance_to_next_word(hare);
*tortoise = NULL;
説明: 動きの速い「うさぎ」ポインタは、一度に 1 語ずつ文字列を進みます。以前に見たことのない単語に遭遇すると、その単語を末尾の「亀」ポインターにコピーし、その単語の末尾に進めます。これにより、元の文字列が破壊的に変更されます。
このアプローチを実装するには、advance_to_next_word()
(区切り文字の 1 つによってマークされた単語の端を検出する必要があります) を実装する必要があります。word_copy()
最も重要なのは、任意の単語が引数として最初に渡されたときにbeen_seen()
返さなければならない関数です。同じ引数を使用した後続の呼び出しで。連想配列 (辞書) のデータ構造であれば何でも構いません。false
true