从C中的字符串中删除重复的单词

时间:2012-09-04 05:03:43

标签: c string

我有一个像"one two one three""one|two|three|two"这样的字符串。

有关从C中删除字符串中重复单词的任何想法。

1 个答案:

答案 0 :(得分: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;

说明:快速移动的“野兔”指针一次一个字地在字符串中前进。当它遇到一个以前看不见的单词时,将该单词复制到尾随的“乌龟”指针,然后将其提前到该单词的末尾。这会破坏性地修改原始字符串。

要实现此方法,您需要实现advance_to_next_word()(必须检测由您的分隔符之一标记的单词边缘),word_copy(),最重要的是been_seen(),第一次将任何单词作为参数传递时必须返回false的函数,然后在具有相同参数的任何后续调用中返回true。任何关联数组(字典)数据结构都可以。