字符串-字符串转数字

265 阅读1分钟

描述

真题描述:请你来实现一个 atoi 函数,使其能将字符串转换成整数。

注意:假如该字符串中的第一个非空格字符不是一个有效整数字符、字符串为空或字符串仅包含空白字符时,则你的函数不需要进行转换。

在任何情况下,若函数不能进行有效的转换时,请返回 0。

说明:假设我们的环境只能存储 32 位大小的有符号整数,那么其数值范围为 [−2^31, 2^31 − 1]。如果数值超过这个范围,请返回 INT_MAX (2^31 − 1) 或 INT_MIN (−2^31) 。

示例 1:

  • 输入: "42"
  • 输出: 42

示例 2:

  • 输入: "-42"
  • 输出: -42

示例 3:

  • 输入: "4193 with words"
  • 输出: 4193

示例 4:

  • 输入: "words and 987"
  • 输出: 0 // 第一个非空字符是w,不符合转换

示例 5:

  • 输入: "-91283472332"
  • 输出: -2147483648 // 超过下限

思路

1.先用trim()函数去掉首尾空格 2.用正则做判断,是否是数字或者下划线开头,是否满足转换规则 3.用match方法拿到最前面的数字 4.判断是正数还是负数,看是否超过数值范围 5.记得最后要返回的是正数

实现

function atoi(str) {
    str = str.trim()
    const result = str.match(/^(\-?\d+)/g) 
    const MAX_NUMBER = Math.pow(2,31) - 1
    const MIN_NUMBER = - (MAX_NUMBER + 1)
    
    
    if(result && result.length > 0) {
        const item = result[0]
        if(item.startsWith('-')) {   // 注意startsWith别写错了
            return parseInt(item) < MIN_NUMBER ? 0 : parseInt(item)
        } else {
            return item > MAX_NUMBER ? 0 : parseInt(item)
        }
    }
    
    return 0
}