String Haskell:计算字符串的中缀

String Haskell:计算字符串的中缀,string,haskell,filter,count,String,Haskell,Filter,Count,我想数一数,字符串“egg”在给定字符串中的频率。 我只知道怎么数钱 easter :: String -> Int easter s = length $ filter (== 'e') s 示例:复活节“蛋”->5 提前谢谢你数数单词是很容易的。只需使用boyer-moore实现 import Data.Text.Internal.Search (indices) import qualified Data.Text as T easter :: String -> Int

我想数一数,字符串“egg”在给定字符串中的频率。 我只知道怎么数钱

easter :: String -> Int
easter s = length $ filter (== 'e') s
示例:复活节“蛋”->5


提前谢谢你

数数单词是很容易的。只需使用boyer-moore实现

import Data.Text.Internal.Search (indices)
import qualified Data.Text as T

easter :: String -> Int
easter = length . indices (T.pack "egg") . T.pack

现在有趣的部分是自己编写算法。这是一个很好的学习练习,在算法类中很常见。试试看!第一次不必麻烦使用文本,只需像以前一样使用字符串,并遵循维基百科的文章。

没有重叠的可能性,它就像

> let s="eggabcdefgegggzueggeggegg" in sum [1 | i <- tails s, take 3 i == "egg"]

5

>s=“eggabcdeffgegggzuegegggg”总之[1 | i记住
字符串
只是一个
[Char]
,模式匹配很简单

easter :: String -> Int
easter [] = 0
easter ('e':'g':'g':rest) = 1 + easter rest
easter (x:xs) = easter xs
空字符串中显然没有出现“egg”

如果字符串以“egg”开头,则至少出现1次。将其删除,然后检查字符串的其余部分

如果字符串以任何其他字符开头,请删除第一个字母并继续。

查看数据部分。列出标准库

您希望构建一个函数,查看字符串中的每个点(请记住
String
[Char]
的类型别名),以查看它是否启动“egg”

我可以这样做

easter :: String -> Int
easter str = length $ filter (isPrefixOf "egg") (tails str)

允许重叠吗?“egegeg”有一个“egeg”还是两个?没有人,我想数一数每个相连的“egg”?那么“xoxox”中有多少个“xox”?我想他不是在要求广义实现。只有一个专用于“egg”。我没有想到这个特例,我想,用“egg”也没关系你没有这个案例,你知道吗,为什么它说:模块“Data.Text.Internal.Search”不导出“indicies”?因为它不是
indicies
,而是
indicies
(注意
ie
e
)。我将进行编辑以修复该打字错误。编辑:我还导入了符合条件的文本,以避免在
长度上出现名称冲突。