-6

我有一个类似"one two one three"or的字符串"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;

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

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

于 2012-09-04T05:13:32.820 回答