gpt4 book ai didi

string - Haskell 在 String 中查找 String 的索引

转载 作者:行者123 更新时间:2023-12-02 02:22:15 26 4
gpt4 key购买 nike

我目前正在尝试在另一个字符串中查找特定字符串的索引。所以例如“ababa baab ab bla ab” 中字符串 “ab” 的结果应为 11 和 18。如果当前有问题,我的函数也得到索引 0 和 8
我的功能:

findSubstringIndices :: String -> String -> [Int]
findSubstringIndices text pattern = map (add 1) (findIndices (pattern `isPrefixOf`) (tails text))

最佳答案

选择合适的设备在这里很重要。

import Data.Char

您可以使用 Prelude 中的函数 words 的稍微修改版本,其定义为:

words :: String -> [String]
words s = case dropWhile isSpace s of
"" -> []
s' -> w : words s'' where (w, s'') = break isSpace s'

它将字符串分解为空格分隔的单词列表。修改相当于用字符串中的索引来标记每个单词。例如:

words' :: String -> [(Int, String)]
words' = go 0
where
go n s = case break (not . isSpace) s of
(_, "") -> []
(ws, s') -> (n', w) : go (n' + length w) s''
where
n' = n + length ws
(w, s'') = break isSpace s'

例如:

> words' "ababa baab ab bla ab"
[(0,"ababa"),(6,"baab"),(11,"ab"),(14,"bla"),(18,"ab")]

现在,编写函数 findSubstringIndices 变得几乎微不足道:

findSubstringIndices :: String -> String -> [Int]
findSubstringIndices text pattern = [i | (i, w) <- words' text, w == pattern]

有效果吗?是的,确实如此:

> findSubstringIndices "ababa baab ab bla ab" "ab"
[11,18]

关于string - Haskell 在 String 中查找 String 的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11432506/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com