此atoi函数正在做什么

时间:2018-07-31 13:17:40

标签: string casting integer atoi

我遇到了此函数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减法。我看不到他们如何实现该实现。寻找一些帮助解释它的工作原理/为什么选择这种算法。

0 个答案:

没有答案