牛客网使用JS刷题如何处理输入输出

某牛官方帮助文档镇楼

其中已经给出了js的样例,以简单的A+B题目为例

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

尝试使用node本地运行,我们可以发现,每输入一行回车后即会输出结果,然后可以继续输入

执行结果

我们来解读一下怎么处理的输入输出

//每读一行,即一行输入结束敲回车,执行事件line对应的方法(这里为计算A+B并输出)
rl.on('line', function(line) {
  var tokens = line.split(' ')
  //直接使用console.log进行输出,一次输出即为一行,输出多行可多次使用console.log
  console.log(parseInt(tokens[0]) + parseInt(tokens[1]));
})

关于读多行的问题,理清以后就可以自行解决了,如下方法(看上去好像不太优雅)

// 获取三行输入的值,输出它们的和
var countLine = 1
var tokens = []
rl.on('line', function(line) {
  tokens.push(line)
  if(countLine === 3) {
    //求和
    console.log(
      tokens.reduce(function(sum, item) {
        return sum + parseInt(item)
      }, 0)
    );
    countLine = 1
    tokens = []
  } else {
    countLine++
  }
})

但是如果题目中并没有给出具体的输入行数,上面的方法就不可取了,我们需要一次性读取所有的输入然后再处理输出,操作如下

process.stdin.resume();
process.stdin.setEncoding('ascii');

var input = "";
var input_array = "";

process.stdin.on('data', function (data) {
    input += data;
});

process.stdin.on('end', function () {
    input_array = input.split("\n");
    // 处理input
});

我个人比较喜欢使用第一种方法,在本地终端使用也很方便,第二种方法的话,如果在终端中使用,需要将end事件修改成

process.on('SIGINT', function() {
  // 你的处理
  process.exit(0);
})

这样的话,使用ctrl+c就可以得到输出

吐槽某马和某鹅

习惯了牛客的node输入输出以后其它的都不适应了……

赛马网node官方给出的是上面说到的第二种处理方式,第一种应该也行但我没有试过。注意:赛马将js和node分为两种不同的输入输出,个人很不适应所谓的js输入输出,虽然看上去好像很简单,但是本地不好测啊……输出好像还是用定制的print函数来着……对了,练习的时候还有node选项,等到正式笔试就只有js选项了,神坑……附:赛码网在线编程系统使用指南

腾讯则根本没有node选项,只有定制的js输入,使用固定的main函数接受输入,我至今还不太理解……输出还是用console log

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,933评论 18 139
  • GitChat技术杂谈 前言 本文较长,为了节省你的阅读时间,在文前列写作思路如下: 什么是 webpack,它要...
    萧玄辞阅读 12,715评论 7 110
  • Node.js是目前非常火热的技术,但是它的诞生经历却很奇特。 众所周知,在Netscape设计出JavaScri...
    Myselfyan阅读 4,101评论 2 58
  • (。・∀・)ノ゙嗨,好久不见 好久不见 刚下班就在门口碰见以前的同事红 还是老样子,黑色的长款棉衣,白色的T恤,黑...
    金声说今事阅读 220评论 0 0
  • 虽是深秋时,不见萧条状 入目是青葱,欣欣向荣派 昨日艳阳天,今日雨纷纷 雨落知秋寒,落叶纷踏至 天凉添几件,冬至不远矣
    曲声和阅读 269评论 1 6