一.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;
}
}
});
四.通用性的方式:按照資料流輸入的方式
在做筆試時碰到過例題的輸入方式,不是按行讀入的,是一次性讀入,然後按照“
”進行行分隔,下面上個具體例子的程式碼,供大家參考,有興趣的可以學習下。
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("
");
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);
}
});
五.總結
通過以上這種方式,應該能完成大部分的線上程式設計題,有需要的童鞋可以試試看。祝大家筆試順利,找到一份滿意的工作!