Javascript用readline读入数据

3,706 阅读2分钟

1. 问题描述

当使用Javascript语言来刷算法题时,一般在解决具体的算法问题之前,都需要对测试样例做输入处理。(刷leetcode,则不需要处理输入,只需要关心解题算法。)

在C语言中,我们可以使用scanf(),在C++中可以使用cin>>来接收输入数据。在JS中貌似没有类似的函数,例如在牛客网中,一般都会封装一个readline函数,让Js来读入数据。

在本地使用readline函数

一般刷题网站的在线编辑器都不是很好用,导致coding体验不好,所以一般在本机的编辑器中写代码。

2. 如何解决

使用codeforces提供的插件,详情见:How to read inputs using JAVASCRIPT V8 ?

依赖:

  1. 安装NodeJs和Npm
  2. 安装插件npm i @ip-algorithmics/codeforces-io

在安装插件之后,新建a.js文件和input.txt,然后填入下面的内容

// a.js
const { readline, print } = require("@ip-algorithmics/codeforces-io"); 
// 起别名 
// let read_line = readline
// 提交代码时,以上不需要复制

let line;
while( line = readline()){
    console.log(line)
}
// input.txt
a,b,c,d
1,2,3,4
100

当运行a.js之后,可以看到终端输出为

a,b,c,d
1,2,3,4
100

提交代码时,我们可以省略第一行,因为一般在线编辑器都帮我们实现了readline函数,可以直接使用。

注:如果编辑器使用的不是readline而是read_line,则只需要执行let read_line = readline 即可。

3. readline处理输入

let line = readline()

这里的变量line默认是string类型的。

1) 处理Number

let n = parseInt(line)
// 或
let m = parseFloat(line)

2) 一行多个输入变量

例如input.txt中为

a,b,c,d
// 或
a b c d
// a.js
let line = readline()
let arr = line.split(',') // ['a', 'b', 'c', 'd']
// 或
let arr = line.split(' ') // ['a', 'b', 'c', 'd']

3)一行多个Number

例如input.txt中为

1,2,3,4
// 或
1 2 3 4
// a.js
let line = readline()
let arr = line.split(',').map(item => parseInt(item)) // [1,2,3,4]
// 或
let arr = line.split(' ').map(item => parseInt(item)) // [1,2,3,4]