JavaScript 处理牛客网编程题的输入输出

1,164 阅读2分钟

我们知道 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