牛客网 javascript acm输入模板 node

495 阅读3分钟

参考:juejin.cn/post/709872…

参考:juejin.cn/post/705076…

Javascript node环境输入

前言

readline函数

readLine()是读取流数据的时候用的,当读到换行标记'\n'、'\r'(回车)时,会跟着换行,同时会以字符串形式返回这一行的数据,当读取完所有的数据时会返回null

rl.on() rl.on('line',(line)=>{})相当于开启读行的监听,读完一行执行回调。 rl.on('close',()=>{})结束读取的回调。可以在这里处理全局变量

rl.close() 停止读取

1、单行输入

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void async function () {
    // Write your code here
    while(line = await readline()){
        let tokens = line.split(' ');
        let a = parseInt(tokens[0]);
        let b = parseInt(tokens[1]);
        console.log(a + b);
    }
}()

2、确定的多行输入

例题:写出一个程序,接受一个由字母、数字和空格组成的字符串,和一个字符,然后输出输入字符串中该字符的出现次数。(不区分大小写字母) 输入描述: 第一行输入一个由字母、数字和空格组成的字符串,第二行输入一个字符(保证该字符不为空格)。

输入:

ABCabc

A

输出:

2

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

// 应该输入的行数
let num = 2;
let inputs =[];
rl.on('line', function (line) {
    inputs.push(line);
    if(inputs.length === num){
        // 写你需要的算法内容,inputs内为输入的两个数组
        console.log(inputs[0], inputs[1])
        // 处理完一组数据后需要清空 inputs,使其容纳下一组数据
        inputs = [];
    }
});

3、可知的多行输入

输入描述: 第一行先输入随机整数的个数 N 。 接下来的 N 行每行输入一个整数,代表明明生成的随机数。 具体格式可以参考下面的"示例"。

输入:

3

2

2

1

输出:

1

2

const rl = require("readline").createInterface({ input: process.stdin });

let num = 0;
let inputs = [];
rl.on('line', function (line) {
    // 为该样例需要的输入行数
    if(num === 0){
        num = parseInt(line)
    }else{
    // 将后面的输入存入到inputs数组中
        inputs.push(line);
    }
    // 输入完成,开始正式的逻辑实现
    if(inputs.length === num){
        for(let item of inputs){
            // item为数字后的每行输入
            console.log(item)

            // 置空,开始下一组数据
            num = 0;
            inputs = [];
        }
    }
});

4、处理多行输入(行数不明确)

牛客网华为机试题 HJ19 简单错误记录 输入描述: 每组只包含一个测试用例。一个测试用例包含一行或多行字符串。每行包括带路径文件名称,行号,以空格隔开。 输出描述: 将所有的记录统计并将结果输出,格式:文件名 代码行数 数目,一个空格隔开,如:

输入:

D:\zwtymj\xccb\ljj\cqzlyaszjvlsjmkwoqijggmybr 645

E:\je\rzuwnjvnuz 633

C:\km\tgjwpb\gy\atl 637

F:\weioj\hadd\connsh\rwyfvzsopsuiqjnr 647

E:\ns\mfwj\wqkoki\eez 648

D:\cfmwafhhgeyawnool 649

E:\czt\opwip\osnll\c 637

G:\nt\f 633

F:\fop\ywzqaop 631

F:\yay\jc\ywzqaop 631

D:\zwtymj\xccb\ljj\cqzlyaszjvlsjmkwoqijggmybr 645

输出:

rzuwnjvnuz 633 1

atl 637 1

rwyfvzsopsuiqjnr 647 1

eez 648 1

fmwafhhgeyawnool 649 1

c 637 1

f 633 1

ywzqaop 631 2

const readline = require('readline');

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

let inputs = [];
let handleData = [];

rl.on('line', function (line) {
    if(!inputs.includes(line)){
        inputs.push(line);
    }
});
// 输入结束时,在 close 中对数据进行处理
rl.on('close', function () {
    for(let item of inputs){
        console.log(item)
    }
});