模版
js
单行的输入输出
var readline = require('readline')
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
})
rl.on('line', function(line) {
var arr= line.split(' ')
console.log(parseInt(arr[0]) + parseInt(arr[1]));
})
多行的输入输出
多行的输入输出
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
const inputArr = [];//存放输入的数据
rl.on('line', function(line){
//line是输入的每一行,为字符串格式
inputArr.push(line.split(' '));//将输入流保存到inputArr中(注意为字符串数组)
}).on('close', function(){
console.log(fun(inputArr))//调用函数并输出
})
//解决函数
function fun() {
xxxxxxxx
return xx
}
js
const readline = require('readline');
- 借助 `require` 函数引入 Node.js 的 `readline` 模块,该模块可用于读取用户的输入。
接口
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
- 调用 `readline.createInterface` 方法来创建一个 `readline` 接口实例 `rl`。
- `input: process.stdin` 表明输入源是标准输入(也就是用户在控制台输入的内容)。
- `output: process.stdout` 意味着输出目标是标准输出(也就是控制台
处理
rl.on('line', function(line){
inputArr.push(line.split(' '));
}).on('close', function(){
console.log(fun(inputArr));
});
rl.on('line', ...)`:为 `rl` 实例添加一个 `line` 事件监听器。
每当用户输入一行数据并按下回车键时,这个监听器就会被触发。
line` 是用户输入的每一行数据,其类型为字符串。
line.split(' ')` 会把输入的一行字符串按空格分割成一个字符串数组。
inputArr.push(line.split(' '))` 会将分割后的数组添加到 `inputArr` 中。
rl.on('close', ...)`:为 `rl` 实例添加一个 `close` 事件监听器。当用户按下 `Ctrl + D` 结束输入时,这个监听器会被触发。
console.log(fun(inputArr))`:调用 `fun` 函数,将 `inputArr` 作为参数传入,然后把 `fun` 函数的返回值输出到控制台。
在 ACM 模式下使用 Node.js 进行输入输出时,有一些关键要点需要注意,以下为你详细介绍并说明如何处理输入数据。
注意要点
1. 输入输出方式
- 输入 :ACM 模式通常要求从标准输入(
stdin
)读取数据。在 Node.js 里,可以使用readline
模块来实现。 - 输出 :需要将结果输出到标准输出(
stdout
),一般使用console.log
方法。
2. 输入结束判断
要依据题目给定的输入格式,准确判断输入何时结束。有的题目会明确给出测试用例的数量,有的则通过特定的结束标志(如 EOF
)来表示输入结束。
3. 数据类型转换
从标准输入读取的数据通常是字符串类型,若题目需要数值类型,就必须进行相应的转换,例如使用 parseInt
或 Number
函数。
4. 性能考虑
对于大规模输入数据,要留意代码的时间复杂度和空间复杂度,防止出现超时或内存溢出的问题。
输入数据处理方法
1. 单行输入
若题目仅要求输入一行数据,可使用 readline.question
方法。
javascript
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.question('', (input) => {
// 处理输入数据
const data = input.split(' ').map(Number);
console.log(data);
rl.close();
});
在上述代码中,readline.question
用于读取一行输入,input.split(' ')
把输入按空格分割成数组,map(Number)
则将数组元素转换为数值类型。
2. 多行输入
若题目要求输入多行数据,可监听 line
事件,当输入结束时(如按下 Ctrl + D
),触发 close
事件进行数据处理。
javascript
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
const inputData = [];
rl.on('line', (line) => {
inputData.push(line);
});
rl.on('close', () => {
// 处理输入数据
for (let i = 0; i < inputData.length; i++) {
const data = inputData[i].split(' ').map(Number);
console.log(data);
}
});
在这段代码中,rl.on('line', ...)
监听每行输入,将其添加到 inputData
数组中。当输入结束时,rl.on('close', ...)
会遍历 inputData
数组,对每行数据进行处理。
3. 已知测试用例数量的输入
若题目明确给出测试用例的数量,可根据该数量读取相应的输入数据。
javascript
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
const inputData = [];
rl.on('line', (line) => {
inputData.push(line);
if (inputData.length === 1) {
const t = parseInt(inputData[0]);
if (inputData.length === t + 1) {
// 处理输入数据
for (let i = 1; i <= t; i++) {
const data = inputData[i].split(' ').map(Number);
console.log(data);
}
rl.close();
}
}
});
在这个例子中,首先读取第一行数据,获取测试用例的数量 t
,然后继续读取 t
行输入数据,最后对这些数据进行处理。
总结
在 ACM 模式下使用 Node.js 进行输入输出时,要根据题目要求选择合适的输入输出方式,准确判断输入结束条件,进行必要的数据类型转换,并注意代码的性能。通过监听 line
和 close
事件,可以方便地处理多行输入数据。
参考:JavascriptACM模式输入输出JavascriptACM模式输入输出 在机试时往往都需要用ACM模式,也就是需要 - 掘金 (juejin.cn)