Haskell程序检查字符串是否为数字


在Haskell中,我们可以使用read函数和Data.char库来查找给定的字符串是否为数字。以下示例将使您清楚了解有效的数字值。

例如,121、12321和1221如果作为字符串输入,则为有效的数字值。

算法

  • 步骤1 − 定义使用reads函数的isNumeric函数

  • 步骤2 − 程序执行将从main函数开始。main()函数控制整个程序。它被写成main = do。在main函数中,字符串被传递给isNumeric函数。函数的结果用于打印一条消息,指示字符串是否表示有效的数字值。

  • 步骤3 − 变量名为“str”,正在初始化。它将保存要检查的字符串,以确定它是否为数字。

  • 步骤4 − 函数调用后,使用'putStrLn'语句将结果打印到控制台。

示例1

在此示例中,isNumeric函数使用reads函数尝试将输入字符串解析为数字值。reads函数返回一个对列表,其中每一对都包含一个已解析的值和解析后剩余的字符串。如果已解析的值是有效的数字值,则剩余的字符串应为空字符串。

isNumeric :: String -> Bool
isNumeric str = case reads str :: [(Double, String)] of
               [(_, "")] -> True
               _         -> False
   
main :: IO ()
main = do
   let str = "1234"
   if isNumeric str
      then putStrLn "The string represents a valid numeric value."
      else putStrLn "The string does not represent a valid numeric value."

输出

The string represents a valid numeric value.

示例2

在此示例中,isNumeric函数使用正则表达式模式来检查输入字符串是否与数字值的语法匹配。模式"^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$"匹配以可选符号(+或-)开头,后跟任意数量的数字(0-9),后跟可选的小数点和更多数字,以及可选的以字母e或E、可选符号(+或-)和更多数字指定的指数的字符串。如果传递的字符串与该模式匹配,则该函数返回True,表示输入字符串表示有效的数字值。否则,它返回False。

import Text.Regex.Posix

isNumeric :: String -> Bool
isNumeric str = str =~ "^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$"

main :: IO ()
main = do
   let str = "1234"
   if isNumeric str
      then putStrLn "The string represents a valid numeric value."
      else putStrLn "The string does not represent a valid numeric value."

输出

The string represents a valid numeric value.

示例3

在此示例中,isNumeric函数使用正则表达式模式来检查输入字符串是否与数字值的语法匹配。模式"^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$"匹配以可选符号(+或-)开头,后跟任意数量的数字(0-9),后跟可选的小数点和更多数字,以及可选的以字母e或E、可选符号(+或-)和更多数字指定的指数的字符串。如果传递的字符串与该模式匹配,则该函数返回True,表示输入字符串表示有效的数字值。否则,它返回False。

import Data.Char

isNumeric :: String -> Bool
isNumeric [] = False
isNumeric str = all isDigit str ||
               (head str == '-' || head str == '+') && all isDigit (tail str) ||
               all isDigit (takeWhile isDigit str) &&
               head (dropWhile isDigit str) == '.' &&
               all isDigit (tail (dropWhile isDigit str))

main :: IO ()
main = do
   let str = "1234"
   if isNumeric str
      then putStrLn "The string represents a valid numeric value."
      else putStrLn "The string does not represent a valid numeric value."

输出

The string represents a valid numeric value.

结论

在Haskell中,我们可以使用reads函数、正则表达式或使用Data.Char库来检查传递的字符串是否为数字。

更新于: 2023年7月14日

1K+ 浏览量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告