在牛客网中对JavaScript
程序员是很不友好的。在处理输入输出流的时候,总是得不到好的处理。在Windows平台下,在处理外部输入输出的时候也非常不擅长进行调试。所以这里,针对这个些问题,看看有没有解决方法。
我们先贴上代码。代码是针对Windows
平台,使用命令行进行调试的程序片段。
/**
* Created by timi on 2017/6/14.
*/
process.stdin.resume(); //stdin是可读的输出流,默认是暂停状态。所以想要从stdin读取必须要调用一次process.stdin.resume();
process.stdin.setEncoding('utf8'); //设置字符编码
var input = "";
var input_array = "";
process.stdin.on('data', function (data) { //监听事件data事件,当有数据过来时触发
input += data; //读取data(字符串数据)到input
if (data === '\r\n') //如果遇到换行,Linux使用'\n'换行
process.stdin.emit('end'); //发射end事件,表示读取结束
});
process.stdin.on('end', function () { //读取结束
if (input === '\n'){ //没有输入,直接结束
process.stdin.emit('end');
return;
}
input_array = input.split("\n"); //变成数组
var n,input_arr=[],arr;
var nLine = 0;
while(nLine < input_array.length){
var line = input_array[nLine++].trim(); //去掉数组每一行的首尾的空白符
if(line === ''){
continue;
}
input_arr.push(line.split(' ')); //变成一个二维数组
}
n = parseInt(input_arr[0][0],10); //二位数组的第一行
arr = input_arr[1].map(e => parseInt(e));//二维数组的第二行
console.log(input);
console.log(input_array);
console.log(input_arr);
console.log(n);
console.log(arr);
});
以下是举例:
12
1024 1024
12
1024 1024
[ '12\r', '1024 1024\r', '\r', '' ]
[ [ '12' ], [ '1024', '1024' ] ]
12
[ 1024, 1024 ]
最后的n
和arr
就是我们获得的数据,感觉好麻烦。