2014-11-28 2 views
0

Я хочу написать функцию, которая будет проверять подстроку EXACT в данной строке. Все, что я использую сейчас, это isInfixOf, но мой друг просто указал, что он не проверяет ТОЧНОЕ слово.Haskell: проверьте точную подстроку

Например, если я пишу

`"hi " `isInfixOf` "hi  you"` 

, то это вернет True. Но я не хочу этого. Все, что я хочу, это он должен вернуть True только в том случае, если он содержит "hi " i.e всего одно место. Как я могу это сделать?

+1

Привет, пожалуйста, откройте один вопрос для каждой задачи. Кроме того, вы что-то пробовали? Приложите код, даже если он частично/не работает. – Benesh

+0

Привет. Да, я редактировал вопрос :) Да, я использую 'isInfixOf', но он работает не так, как ожидалось. – BW12

+2

Я не понимаю, что вы подразумеваете под подстрокой EXACT. Почему «' »hi« isInfixOf »привет вам« не соответствует действительности? Дайте больше примеров, какие именно подстроки, пожалуйста! – Franky

ответ

2

Похоже, вы ищете несколько модифицированную версию isInfixOf:

import Data.Maybe 
import Data.List 

isInfixOf' :: String -> String -> Bool 
isInfixOf' xs ys = any p [stripPrefix xs zs | zs <- tails ys] 
    where 
    p Nothing   = False 
    p (Just (' ' : _)) = False 
    p _    = True 

Идея заключается в том, что мы сначала собрать все строки, которые следуют за соответствующей подстроки, а затем проверить, является ли или не начинать их с пространством ,

Например:

> "hi " `isInfixOf'` "hi you" 
False 

> "hi " `isInfixOf'` "hi you" 
True 
+0

Большое спасибо. Я думаю, что все будет хорошо. Я попробую и опубликую комментарий. – BW12

Смежные вопросы