一.js的控制檯輸入
作各大公司的在線編程題,通常都有輸入輸出,傳統的js不能完成讀取輸入的功能,這時候爲了繼續用js寫編程題,只能藉助node.js來進行在線筆試的輸入輸出,下面具體來講說這個問題。node
用node.js寫編程題的核心在node的readline接口,讀取輸入行,編程
require('readline') 模塊提供了一個接口,用於從可讀流(如 process.stdin)讀取數據,每次讀取一行。 它能夠經過如下方式使用:學習
const readline = require('readline');
基本用法以下:ui
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); //輸出結果 });
經過這樣一個過程,拿到輸入->邏輯處理->輸出結果,完成在線筆試。 code
可是實際中會碰到一個棘手的問題,就是有的題目,輸入不止一行,會有2行甚至N行的輸入,那麼像上面這種寫法,data只能拿到第一次單行的輸入,不可以拿到多行輸入,因此不能解決問題,那麼接下來經過兩個簡單小例子介紹如何進行接收控制檯多行輸入。接口
二.兩行輸入的在線編程ci
題目:輸入兩行,第一行是字符串s1,第二行是字符串s2,輸出兩個字符串鏈接後的結果。
例子:字符串
輸入 "hello" "world" 輸出 "helloworld"
代碼以下:input
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行輸入的在線編程it
題目:輸入數字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.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"); var nLine = 0; while(nLine < input_array.length){ var line = input_array[nLine++].trim(); if(line === ''){ continue; } var input_arrays = line.split(' '); var a = +input_arrays[0]; var b = +input_arrays[1]; console.log(a+b); } });
五.總結經過以上這種方式,應該能完成大部分的在線編程題,有須要的童鞋能夠試試看。祝你們筆試順利,找到一份滿意的工做!