题目
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.输入前面的空格清除 “ 123”
3.考虑符号“+123” “-123”
4.出现非数字字符 “ +0 123” “ +123w234” “- 23 ”输出都是0.
5." -+2"输出也是0
6.数字越界问题,我们返回的是int类型,因此要判断数字越界," +2147483648"输出为“2147483647” 储存时应选择比int更大的类型来储存结果(long long int)
代码
class Solution {
public:
int myAtoi(string str) {
long long int result = 0;
int slen = str.size();
if (slen < 1)
return 0;
int flag = 1, i = 0;
int nflag=0;
while (str[i] == ' ') {
i++;
}
//int i=str.find_first_not_of(' ');
while (i < slen) {
if (str[i] == '+') {
flag = 1;
nflag++;
i++;
}
if (str[i] == '-') {
flag = -1;
nflag++;
i++;
}
if(nflag>1)
{
return 0;
}
if (str[i] >= '0' && str[i] <= '9') {
result = result * 10 + (str[i++] - '0');
if (result * flag < INT_MIN)
return INT_MIN;
if (result * flag > INT_MAX)
return INT_MAX;
}else{
break;
}
}
return result * flag;
}
};