前段时间,我决定在HackerRank上解决一个简单的任务,但是使用OCaml和Core,以便学习它们.在其中一项任务中,我应该从标准输入中读取数据:
第一行包含一个整数,表示电话簿中的条目数.每个后续行在单行上以空格分隔值的形式描述条目.第一个值是朋友的名字,第二个值是-digit电话号码.
在电话簿条目行之后,存在未知数量的查询行.每行(查询)包含一个要查找的行,您必须继续读取行,直到没有更多输入.
主要问题:
scanf "%s\n"直到读End_of_file我的代码变得凌乱:
open Core.Std
open Printf
open Scanf
let read_numbers n =
let phone_book = String.Table.create () ~size:n in
for i = 0 to (n - 1) do
match In_channel.input_line stdin with
| Some line -> (
match (String.split line ~on:' ') with
| key :: data :: _ -> Hashtbl.set phone_book ~key ~data
| _ -> failwith "This shouldn't happen"
)
| None -> failwith "This shouldn't happen"
done;
phone_book …Run Code Online (Sandbox Code Playgroud) ocaml ×1