字符转数字
本文最后更新于:7 个月前
// 字符转数字,有限状态机
function atoi(str) {
let state = 'start';
let sign = 1;
let ans = 0;
let statue = {
'start': ['start', 'signed', 'number', 'end'],
'signed': ['end', 'end', 'number', 'end'],
'number': ['end', 'end', 'number', 'end'],
'end': ['end', 'end', 'end', 'end'],
}
let getC = char => {
if (char === ' ') {
return 0
} else if (char == '+' || char == '-') {
return 1
} else if (typeof Number(char) == 'number' && !isNaN(Number(char))) {
return 2
} else {
return 3
}
}
let getD = char => {
state = statue[state][getC(char)];
if (state === 'signed') {
sign = char === '-' ? -1 : 1;
} else if (state === 'number') {
ans = sign === -1 ? Math.min(ans * 10 + (char - 0), Math.pow(2, 31)) : Math.min(ans * 10 + (char - 0), Math.pow(2, 31) - 1);
}
}
for (var i = 0; i < str.length; i++) {
getD(str[i])
}
return ans * sign;
}
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!