-6

"one two one three"またはのような文字列があります"one|two|three|two"

C の文字列から繰り返される単語を削除するアイデア。

4

1 に答える 1

2

疑似コード:

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()返さなければならない関数です。同じ引数を使用した後続の呼び出しで。連想配列 (辞書) のデータ構造であれば何でも構いません。falsetrue

于 2012-09-04T05:13:32.820 に答える