Geo*_*pty 9 javascript string integer type-conversion
我想知道,请求受访者手动将字符串解析为int的原因是什么?(不依赖于可能内置于该语言中的任何转换/类型转换).这是一个标准问题,从书籍或清单或其他什么建议?
在接受采访时,SO上的其他人是否有人问过这个问题?我想我在解释它并在白板上涂鸦时钉了它,因为我收到了暂定的工作机会:)
下面是我在Javascript中的充实实现.下面有一些天真的方面(例如,它没有采用基数参数),但它演示了一个(或多或少)正确的算法.
function to_i(strValue) { //named so as to not be confused with parseInt
if (typeof strValue !== 'string' || strValue.length === 0) {
return Number.NaN;
}
var tmpStr = strValue;
var intValue = 0;
var mult = 1;
for (var pos=tmpStr.length-1; pos>=0; pos--) {
var charCode = tmpStr.charCodeAt(pos);
if (charCode < 48 || charCode > 57) {
return Number.NaN;
}
intValue += mult * Math.abs(48-charCode);
tmpStr = tmpStr.substr(0, tmpStr.length-1);
mult *= 10;
}
return intValue;
}
Run Code Online (Sandbox Code Playgroud)
Jör*_*tag 13
我也没有被问过这个问题.
乍一看,似乎其中一个"尽可能早地除去明显无能的白痴,以避免浪费宝贵的采访时间"类型的问题.
但如果你仔细观察它,那里实际上有一些非常有趣的东西.所以,如果我是那个问这个问题的人,这就是我要找的东西:
jslint友好的代码以下是使用折叠解决问题的示例(在ECMAScript中调用reduce):
"use strict";
function toInteger(s) {
return s.split('').reverse().reduce(function (n, c, i) {
if (c === '-') return -n;
return n + (c.charCodeAt(0) - 48) * Math.pow(10, i);
}, 0);
}
Run Code Online (Sandbox Code Playgroud)
这是一个简单的递归下降解析器,它可以动态地构建值:
"use strict";
function toInteger(s) {
var input,
output = 0,
sign = 1,
lookahead = function () {
return input.charAt(0);
},
consume = function () {
var res = input.slice(0, 1);
input = input.slice(1, input.length);
return res;
},
isDigit = function (c) {
return /[0-9]/.test(c);
},
signParser = function () {
if (lookahead() === '-') {
sign *= -1;
consume();
}
},
digitParser = function () {
if (!isDigit(lookahead())) return false;
output *= 10;
output += (consume().charCodeAt(0) - 48);
return true;
},
numberParser = function () {
signParser();
while (digitParser());
};
input = s;
numberParser();
if (!input.length === 0) return false;
output *= sign;
return output;
}
Run Code Online (Sandbox Code Playgroud)
就像这种面试问题一样,没有人会认真地希望受访者只是在白板上写下这些功能.特别是递归下降解析器.但恕我直言,任何人都应该能够勾勒出这个功能的样子.特别是,递归下降解析器的一个优点是它是一个非上下文语法直接转换为一组解析函数,受访者应该能够大致解释转换是如何工作的,以及一种解析函数对应于什么样的语法结构.
呼,这是一个很多的东西,你可以走出这样一个简单的问题!