我想删除字符串中重复的单词..
eg: if input is "he is the the good boy boy"
out put is "he is the good boy"
我完成了编码,但工作不正常。
deleterepeat:: String -> String
deleterepeat [] = []
deleterepeat [xs] = [xs]
deleterepeat (xs1:xs2:xs)
| xs1 == xs2 = deleterepeat (xs1:xs)
| otherwise = xs1 : deleterepeat (xs2:xs)
removeall :: String -> String
removeall = unwords . map deleterepeat. words
这适用于字符..但不能用于文字..
有人可以帮我解决这个问题......
答案 0 :(得分:2)
问题在于deleterepeat
正在处理String
,即[Char]
,而不是[String]
。这意味着它会删除每个单词中的重复字符,而不是重复的单词。
将类型更改为Eq a => [a] -> [a]
或[String] -> [String]
,并将其直接调用整个单词列表,即使用deleterepeat
而不是map deleterepeat
。
答案 1 :(得分:1)
将deleterepeat的类型更改为[String] - > [String],然后删除地图。
答案 2 :(得分:0)
使用Data.List中的“words”和“nub”函数会更容易。