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.
Update (2015-02-10):
The signature of the C++
function had been updated. If you still see your function signature accepts a const char *
argument,
please click the reload button to reset your code definition.
首先分析:
难点在于异常情况的处理,很难考虑全面:实际上模拟人性错误习惯,以下答案为别人的答案
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;
}
};
注:本博文为EbowTang原创,后续可能继续更新本文。如果转载,请务必复制本条信息!
原文地址:http://blog.csdn.net/ebowtang/article/details/50511705
原作者博客:http://blog.csdn.net/ebowtang