我遇到了此函数atoi
,将字符串转换为整数,如下所示:
function atoi2(n) {
let res = 0;
for (let char of n) {
res = (res * 10) + (char - '0')
}
return res
}
将符号考虑在内的另一个变体是:
export function atoi(str: string): number {
const zeroCode = '0'.charCodeAt(0);
let sign = 1;
if (str[0] === '-') {
str = str.substring(1);
sign = -1;
}
let acc = 0;
for (const char of str) {
acc = acc * 10 + (char.charCodeAt(0) - zeroCode);
}
return sign * acc;
}
这里one more。
想知道主循环在做什么,我不太了解正在发生的事情。具体是:
let acc = 0;
for (const char of str) {
acc = acc * 10 + (char.charCodeAt(0) - zeroCode);
}
let res = 0;
for (let char of n) {
res = (res * 10) + (char - '0')
}
因此它正在遍历字符串的每个字符,但随后它会从零开始减去(我从来没有做过字符串减法,所以我不确定是什么意思,也不确定为什么选择零)。然后将旧结果乘以10,然后加上char减法。我看不到他们如何实现该实现。寻找一些帮助解释它的工作原理/为什么选择这种算法。