【问题标题】:Haskell: How to remove a non-number from a StringHaskell:如何从字符串中删除非数字
【发布时间】:2020-11-16 21:21:15
【问题描述】:

我必须编写一个只从字符串返回数字的代码。 我知道如何从字符串中删除数字:

numbersInString = map removeNumbers.words
 where 
  removeNumbers ""     = ""
  removeNumbers (s:ss)
   | isNumber s = removeNumbers ss
   | otherwise  = s : removeNumbers ss

但我在删除非数字时需要它。 例如:

removeNonNum :: String -> [String]

....

removeNonNum "234+8" == ["234", "8"]

【问题讨论】:

  • 请注意,words 仅在空白字符处拆分,它会将"234+8" 视为单个单词。另请注意,removeNumbers 只是 filter isNumber

标签: haskell


【解决方案1】:

words 仅在空白处拆分,因此请创建自己的递归 removeNonNum 函数(此代码使用 span :: (a -> Bool) -> [a] -> ([a], [a])):

import Data.Char

removeNonNum :: String -> [String]
removeNonNum "" = []
removeNonNum s@(x:_)
    -- we have numbers at the start, extract them and add them to the list
    | isNumber x =
        let (numbers, rest) = span isNumber s
         -- recurse onto the remaining parts
         in numbers:removeNonNum rest
    -- we don't have numbers at the start, skip them and continue recursing
    | otherwise = removeNonNum $ dropWhile (not . isNumber) s

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-24
    • 1970-01-01
    • 2011-10-19
    • 2012-01-21
    • 1970-01-01
    • 1970-01-01
    • 2018-01-23
    相关资源
    最近更新 更多