String to Integer (atoi)
本来以为是简单的字符转整型,提交的时候的问题很多。
其实是参照标准库atoi函数:
比如说空串,空格,字母,+号和-号,考虑溢出。
至于溢出,在之前的题目中,说到,用long long int 保存数据后再用INT_MAX和INT_MIN来判断,在此需要考虑正负号问题。
最后舍去尾部无效字符:
例如当 input 为“12a11”
expect 为 12
关于atoi函数源码,可以参考:http://blog.csdn.net/feliciafay/article/details/17111231
代码:
#include<iostream>
using namespace std;
class Solution {
public:
int myAtoi(string str) {
int i = 0;
int flag = 0;
long long int result = 0;
while(str[i]==' ')//while space
i++;
if(str[i]=='-')
{
flag --;
i++;
}
else if(str[i]=='+')
{
flag ++;
i++;
}
else if(str[i]-'0'>=0 && str[i]-'0'<=9)
;
else
return 0;
while(i<str.length())
{
if(str[i]-'0'>=0 && str[i]-'0'<=9)
{
result = result* 10 + (str[i]-'0');
if(flag < 0)
{
if(result > INT_MAX)
return INT_MIN;
}
else
{
if(result > INT_MAX)
return INT_MAX;
}
i++;
}
else
break;
//i++;
}
if(flag >= 0 )
return result;
else
return -result;
}
};