我有一个像"one two one three"
或"one|two|three|two"
这样的字符串。
有关从C中删除字符串中重复单词的任何想法。
答案 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
。任何关联数组(字典)数据结构都可以。