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+ 瀏覽量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告