Haskell如何将字符串分割为5段并生成字符串列表
解决Haskell字符串分割为5段的问题
你的代码问题在于每次递归都会重新计算当前子串的calctake值,但递归过程中子串长度在不断缩短,导致每次截取的长度不一致,最终无法正确分成5段。正确的做法是只计算一次每个片段的长度,然后用这个固定值来递归分割字符串。
修正后的代码
splitintoFive :: String -> [String] splitintoFive s = split chunkSize s where chunkSize = length s `div` 5 split _ [] = [] split n xs = take n xs : split n (drop n xs)
代码说明
- 首先在
where块中计算chunkSize:也就是原字符串长度除以5,这个值只计算一次,是固定的每个片段的长度。 - 定义辅助函数
split,接收固定的片段长度n和待分割的字符串xs:- 如果
xs为空,返回空列表; - 否则截取前
n个字符作为当前片段,再递归分割剩下的子串。
- 如果
验证示例
比如输入长度为10的字符串"abcdefghij",chunkSize为2,分割结果就是["ab", "cd", "ef", "gh", "ij"],完全符合要求。
内容的提问来源于stack exchange,提问作者Stackbot124
相关产品推荐
相关产品推荐

