在OCaml中读取整数/字符串输入的noob问题

问题描述 投票:0回答:1

我在Hackerrank尝试了一些编码挑战,我想知道如何使用OCaml读取一行空格分隔的整数。我知道如果输入整数是换行符,那么我们就可以做到

let recread_lines () =
    try line = read_line ()
    in line:: read_lines()
with End_of_file->[]

然后将列表转换为int使用列表

let ()= 
let input = read_lines () 
in List.map int_of_string input.

我也知道我们可以通过执行以下操作从一行整数读取第一个整数:

let n1 =Scanf.scanf " %d" (fun x -> x)

从C开始,我知道scanf方法扫描该行,查找参数中定义的结构,然后将扫描的值存储到变量中。我没有看到在OCaml中scanf方法结束时使用(fun x-> x)。

我不知道怎么读一行整数,所以如果你能指出我正确的方向,我就能够应对这些挑战!

ocaml
1个回答
0
投票

这是一个从stdin读取一行空格分隔整数的函数:

let read_ints () =
    let line = read_line () in
    let ints = Str.split (Str.regexp "  *") line in
    List.map int_of_string ints

如果输入中没有更多行,此函数将引发End_of_file

如果实际上有与空格混合的标签(例如),则可以调整正则表达式。

(我相信多年来我发现scanf系列功能在出现意外输入时容易表现不佳。这对OCaml来说不是问题,对所有拥有scanf的语言来说都是一样的。所以我没有使用scanf已经有好几十年了。)

© www.soinside.com 2019 - 2024. All rights reserved.