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庫來檢查傳遞的字串是否為數字。