技海泛舟(个人技术研究)

  • 首页
  • 日积月累
  • 学习计划
  • 随想
  • project
  • 关于
技海泛舟
一个技术宅的博客
  1. 首页
  2. 日积月累
  3. nodejs
  4. 正文

用node.js做输入输出

2021年12月29日 1008点热度

js的控制台输入
传统的js不能完成读取输入的功能,这时候为了继续用js编写输入输出,只能借助node.js来进行,下面具体来说说这个问题。

用node.js写编程题的核心在node的readline接口,读取输入行,

require('readline') 模块提供了一个接口,用于从可读流(如 process.stdin)读取数据,每次读取一行。 它可以通过以下方式使用:

const readline = require('readline');

基本用法如下:

const readline = require('readline');//在这里引入

const rl = readline.createInterface({ //创建输入输出接口
  input: process.stdin,
  output: process.stdout
});

rl.on('line',function(line){//监听控制台的输入
 var data=line.trim();//拿到控制台输入
 var result=....//编程逻辑处理

console.log(result); //输出结果
});

通过这样一个过程,拿到输入->逻辑处理->输出结果,完成在线输入蔬菜。

但是实际中有的项目需求,输入不止一行,会有2行甚至N行的输入,那么像上面这种写法,data只能拿到第一次单行的输入,不能够拿到多行输入,所以不能解决问题,那么接下来通过两个简单小例子介绍如何进行接收控制台多行输入。

二.两行输入的在线编程

题目:输入两行,第一行是字符串s1,第二行是字符串s2,输出两个字符串连接后的结果。
例子:

输入 "hello"
"world"

输出 "helloworld"

代码如下:

const readline = require('readline');

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

var k=2;//这里代表题目中设定好的输入的行数
var rows=[]; //用于存储每行的输入

rl.on('line',function(line){
 rows.push(line);//将每次输入的行数据存入
 if(k==rows.length){//当输入的行数等于设定的k值时,开始逻辑处理

   var result=rows[0]+rows[1]; //连接字符串
   console.log(result); //输出结果

   rows.length=0;//状态重置
 }

});

三.N行输入的在线编程

题目:输入数字N(1<N<10),接下来输入N行字符串,输出所有字符串连接后的新字符串。
例子:

输入:4
"nice"
"to"
"meet"
"you"

输出:"nicetomeetyou"
代码如下:

const readline = require('readline');

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

var k=-1;//先给行数置-1,表示还没开始读取
var rows=[]; //用于存储每行的输入

rl.on('line',function(line){
 if(k<0){
   k=parseInt(line.trim());//读取第一行,得到接下来输入的行数
 }else{
   rows.push(line.trim());//将每次输入的行数据存入
    if(k==rows.length){//当输入的行数等于设定的k值时,开始逻辑处理

     var result=rows.reduce(function(fir,cur){ //连接字符串
     return fir+cur;
   });
     console.log(result); //输出结果

     rows.length=0;//状态重置
     k=-1;
   }
 }
});

四.通用性的方式:按照数据流输入的方式

不是按行读入的,是一次性读入,然后按照“\n”进行行分隔,下面上个具体例子的代码,供大家参考,有兴趣的可以学习下。

process.stdin.setEncoding('utf8');

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

process.stdin.on('data', function (data) {
  console.log('输入数据', data, data.toString())

  input += data;
  if (data.includes('\r\n')) {
    console.log("回车了")
    process.stdin.emit('end'); return
  }
});

process.stdin.on('end', function () {
  input_array = input.split("\n");
  var nLine = 0;

  while (nLine < input_array.length) {
    var line = input_array[nLine++].trim();
    if (line === '') {
      continue;
    }
    var input_arrays = line.split(' ');
    console.log(input_arrays)
    input_arrays.reduce((total, num) => {
      num = num * 1
      console.log(total + num)
      return total + num
    }, 0)

  }
});

五.总结
通过以上这种方式,应该能完成大部分的在线编程题!

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: 暂无
最后更新:2021年12月29日
< 上一篇
下一篇 >
归档
  • 2024 年 11 月
  • 2024 年 8 月
  • 2024 年 5 月
  • 2024 年 2 月
  • 2023 年 12 月
  • 2023 年 11 月
  • 2023 年 9 月
  • 2023 年 6 月
  • 2022 年 12 月
  • 2022 年 11 月
  • 2022 年 10 月
  • 2022 年 9 月
  • 2022 年 8 月
  • 2022 年 7 月
  • 2022 年 6 月
  • 2022 年 5 月
  • 2022 年 4 月
  • 2022 年 3 月
  • 2022 年 2 月
  • 2022 年 1 月
  • 2021 年 12 月
  • 2021 年 11 月
  • 2021 年 10 月
  • 2021 年 5 月
分类
  • Android
  • Arduino
  • cordova
  • css
  • go
  • html5
  • JavaScript
  • nodejs
  • oracle
  • project
  • system
  • uni-app
  • vscode
  • vue
  • 学习计划
  • 摘抄
  • 随想
最新 热点 随机
最新 热点 随机
windows安装mysql ,VSCODE连接MySQL数据库 创建api的逻辑 观看七战奥运会 德国波尔告别 go utils工具 Go语言中的sort包帮我们实现了对任一类型的数组进行排序。 vue + go安装
某工会运动会专题 【go】运行main时,error obtaining VCS status: exit status 每日一练之Android简单计算器实现01布局 《垃圾分类》微信小程序 读阮一峰老师-软件工程师的职业建议 go chan communication

COPYRIGHT © 技海泛舟(个人技术研究). 2021-2023. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

黑ICP备19002110号-1

黑公网安备 23060202000432号