描述
真题描述:请你来实现一个 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
}