来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/ba-zi-fu-chuan-zhuan-huan-cheng-zheng-shu-lcof
- 先去除前置空格
- 再检查是否带正负号
- 对一个个字符进行读取,并转换成相应的整数;在此过程中注意判断整数范围是否越界
坑
正负整数 int 的边界不一样,要分别判断
INT_MAX:0x7fffffff 2147483647
INT_MIN:0x80000000 -2147483648
int strToInt(string str) {
// base case
if (str.empty())
{
return 0;
}
int index = 0;
// 去除前置空格
while (index < str.size() && str[index] == ' ')
{
++index;
}
// 检查符号
bool isMinus = false;
if (index == str.size())
{
return 0;
}
else if (str[index] == '+')
{
++index;
}
else if (str[index] == '-')
{
isMinus = true;
++index;
}
if (index == str.size())
{
return 0;
}
// 遍历数字
long long num = 0;
while (index < str.size() && str[index] >= '0' && str[index] <= '9')
{
num = num * 10 + str[index] - '0';
++index;
// 检查是否越界
if (isMinus && num > 0x80000000) // 负数越界
{
return INT_MIN;
}
if (!isMinus && num > 0x7fffffff) // 整数越界
{
return INT_MAX;
}
}
// 加上符号
num = isMinus ? -num : num;
return static_cast<int>(num);
}