赛码网&牛客在acm模式下利用node.js处理多行输入方法

赛码网在JS Node的语言下,acm模式的默认标准输入输出代码是这样的:

const readline = require('readline');

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});
rl.on('line', function (line) {
    const tokens = line.split(' ');
    console.log(parseInt(tokens[0]) + parseInt(tokens[1]));
});

输入:1 1
返回值:2

单行还好,如果是碰到多行就要转化一下

多行输入

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

// 初始化一个数组来存储输入的每一行数据
let lines = [];

function changeNum(arr) {
  return arr.map(item => {
    // 检查当前项是否为数组,如果是,则递归调用该函数
    if (Array.isArray(item)) {
      return changeNum(item);
    } else {
      // 将字符串转换为数字
      return Number(item);
    }
  });
}
rl.on('line', function (line) {
    // 去除每行首尾的空格,然后按空格分割每一行
    lines.push(line.trim().split(' '));
    if(lines.length===5){
        //有几行写多少,5只是针对5行输入
        lines=changeNum(lines)
        //书写自己代码的逻辑
         console.log(lines); 
}});

代码解释:
这段代码使用了Node.js的readline模块来从标准输入读取数据。下面是对代码的逐行分析:

  1. var readline = require('readline'); - 这行代码引入了Node.js的readline模块,该模块允许程序从标准输入读取数据。

  2. const rl = readline.createInterface({ ... }); - 这行代码创建了一个readline.Interface对象,它配置了readline模块以从标准输入(process.stdin)读取数据,并将输出发送到标准输出(process.stdout)。

  3. let lines = []; - 声明一个变量lines,用来存储从标准输入读取的每一行数据。

  4. function changeNum(arr) { ... } - 定义了一个名为changeNum的函数,它接受一个数组arr作为参数。这个函数的目的是将数组中的所有字符串元素转换为数字。

  5. return arr.map(item => { ... }); - 使用map函数遍历数组arr中的每个元素。对于每个元素,执行以下操作:

    • if (Array.isArray(item)) { ... } - 如果元素item是一个数组,递归调用changeNum函数以处理嵌套数组。

    • return Number(item); - 如果元素item不是数组,使用Number函数将其转换为数字。

  6. rl.on('line', function (line) { ... }); - 为readline接口添加一个事件监听器,当接收到一行输入时触发。这个事件监听器做了以下事情:

    • lines.push(line.trim().split(' ')); - 读取一行输入,去除首尾的空格,然后使用空格作为分隔符将其分割成数组,并添加到lines数组中。

    • if(lines.length===5){ ... } - 当lines数组的长度达到5时,执行以下操作:

      • lines=changeNum(lines); - 调用changeNum函数,将lines数组中的所有字符串元素转换为数字。

      • console.log(lines); - 打印转换后的lines数组。

这段代码的主要目的是从标准输入读取数据,每读取5行数据后,将这些数据中的字符串转换为数字,并打印转换后的数组。这可能是为了处理某种格式的输入数据,例如,每5行数据表示一个记录,需要将这些记录中的数字字符串转换为实际的数字类型。

输入:

1
2 3
3
4 5
5

输出:[ [ 1 ], [ 2, 3 ], [ 3 ], [ 4, 5 ], [ 5 ] ]
之后就按数组每一项计算

注意:
如果不使用changeNum转化,得到的数据是

[ [ '1' ], [ '2', '3' ], [ '3' ], [ '4', '5' ], [ '5' ] ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值