我们知道 JavaScript 大多数都是函数式编程,就是将程序全都封装在函数里面,然后再调用函数,通过console 控制台或者 node 控制台查看结果。这种编程模式前提是,输入已经指定了。这样的习惯在 leetCode 刷题的时候很流畅,但是在使用牛客网之后就感到很不习惯,因为与 leetCode 不同, 牛客网的输入输出是需要自己处理的。
1.单行输入
牛客网V8引擎是利用了 readline() 接收输入的每一行,该行字符数不能超过1024个,否则会报错。
// 输入 一行 两个数字空格隔开,如: 3 4
while(line=readline()){
var lines = line.split(' '); //字符串转换为字符数组
var a = parseInt(lines[0]);
var b = parseInt(lines[1]);
console.log(a+b);
}
注:readline() 读取的输入为字符串形式。
2.多行输入
let rowData = [] // 存储行数据的数组
while(line=readline()){
rowData.push(line) // 数组第几个元素就是第几行的输入
}
如题目:计算某字符出现次数
描述
写出一个程序,接受一个由字母、数字和空格组成的字符串,和一个字符,然后输出输入字符串中该字符的出现次数(不区分大小写字母)
输入描述:第一行输入一个由字母、数字和空格组成的字符串,第二行输入一个字符(保证该字符不为空格)
输出描述:输出输入字符串中含有该字符的个数。(不区分大小写字母)
const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
void async function () {
// Write your code here
let rowData = []
while(line = await readline()){
rowData.push(line)
if(rowData.length ==2){
let str = rowData[0].toLowerCase(); // 转换大小写
let code = rowData[1].toLowerCase();
let strArr = str.split("")
let obj = {}
for(let i of strArr){
if(obj[i]) obj[i]++
else obj[i] = 1
}
// 字符串中无此元素时, obj[code] 为 undefined, 应输出 0
console.log(obj[code] || 0)
}
}
}()
输入输出
输入:
ABCabc
A
输出:
2