小编gri*_*kov的帖子

如何从stdin轻松读取行?

前段时间,我决定在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

3
推荐指数
2
解决办法
2423
查看次数

标签 统计

ocaml ×1