题目来源:8. String to Integer (atoi)
题目:
Implement atoi to convert a string to an integer.
Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input cases.
Notes: It is intended for this problem to be specified vaguely (ie, no given input specs). You are responsible to gather all the input requirements up front.
分析:
难点在于异常情况的处理,很难考虑全面:
1、处理输入空
2、处理数字前面有空格
3,判断符号位:先出现的就是符号位
4、处理数字前面的0
5、处理输入非法,函数输出0
6、处理溢出情况
代码:
class Solution {
public:
int myAtoi(string str)
{
//1,处理空情况
int len=str.size();
if(len == 0)
return 0;
//2,过滤掉数字前面的空格
int i=0;
while(str[i] == ' ')
i++;
//3,判断符号位
int sign = 0;
if(str[i] == '-')
{
sign = 0;
i++;
}
else if(str[i] == '+')
{
sign=1;
i++;
}
//4,过滤掉数字前面的0
while(str[i] == '0')
i++;
int res = 0, lastRes = 0;
//5,转换字符数字,不是字符数字不要处理
int limit = INT_MAX / 10;
while(i<str.size() && str[i] >= '0' && str[i] <= '9')
{
if(limit < res) return sign == 1 ? INT_MAX : INT_MIN;//判断是否溢出
lastRes = res;
res = res*10 + (int)(str[i] - '0');
if(res < lastRes) return sign == 1 ? INT_MAX : INT_MIN;//判断是否溢出
i++;
}
return sign == 1 ? res : -1*res;
}
};