编辑
2026-01-16
文档
00
请注意,本文编写于 37 天前,最后修改于 18 天前,其中某些信息可能已经过时。

起因是作者本人在学习完JavaScript之后,为了熟悉该语言,打算使用JS刷题巩固基础。但是由于读入方式的问题,实际使用起来会发现非常难处理输入的数据,由于之前都是使用C++刷算法题的,因此自己封装了一个模版,也就30来行代码,就可以直接以C++的风格单个读入输入值,非常方便啊。

在牛客网刷题时选择语言JavaScript Node,在洛谷就选Nodejs吧,这两是一个东西。

js
const readline = require('readline') const rl = readline.createInterface({ input: process.stdin, output: process.stdout }) class Input { constructor() { this.arr = [] this.index = 0 } getFirst() { return this.index >= this.arr.length ? null : this.arr[this.index++] } read(count = 1) { if(count <= 1) return count === 1 ? this.getFirst() : null const res = this.arr.slice(this.index, this.index + count) this.index += res.length return res } write(newArr) { for(let i=0;i<newArr.length;i++) this.arr.push(newArr[i]) } } const input = new Input() const read = (cnt) => input.read(cnt) rl.on('line', line => input.write(line.trim().split(/\s+/))) rl.on('close', () => solve() ) function solve(){ // 在这里写解题代码,使用read读入单个输入。 }

这里提供另一个模版,理论上在数据大的情况下会更快一点。

js
const fs = require('fs') class Scanner { constructor() { this.buffer = fs.readFileSync(0) this.offset = 0 } next() { while(this.offset < this.buffer.length && this.buffer[this.offset] <= 32) this.offset++ if(this.offset >= this.buffer.length) return null let start = this.offset while(this.offset < this.buffer.length && this.buffer[this.offset] > 32) this.offset++ return this.buffer.toString('utf-8', start, this.offset) } nextLine() { while(this.offset < this.buffer.length && (this.buffer[this.offset] === 10 || this.buffer[this.offset] === 13)) this.offset++ if(this.offset >= this.buffer.length) return null let start = this.offset while(this.offset < this.buffer.length && this.buffer[this.offset] !== 10 && this.buffer[this.offset] !== 13) this.offset++ let res = this.buffer.toString('utf-8', start, this.offset++) return res } } const scanner = new Scanner() const read = () => scanner.next() const readLine = () => scanner.nextLine()

本文作者:hwy2580

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!