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.
#include <limits.h>
class Solution {
public:
int myAtoi(string str) {
if(str.empty())
return 0;
bool negative = false;
int result = 0;
int i = 0;
if(str[0] == ' '){
i++;
for(; i < str.size(); i++)
{
if(str[i] != ' ')
break;
}
}
for(; i < str.size(); i++)
{
if(str[i] == ' '){
break;
}
if(str[i] == '+')
{
if(str[i+1] == '+' || str[i+1]== '-')
return 0;
continue;
}
if(str[i] == '-'){
if(str[i+1] == '-' || str[i+1] == '+')
return 0;
negative = true;
continue;
}
if(str[i] >= '0' && str[i] <= '9'){
int value = str[i] - '0';
if(negative)
{
if(result < INT_MIN / 10)
return -2147483648;
if(result * 10 < INT_MIN + value)
return -2147483648;
result = result * 10 - value;
}else{
if(result > INT_MAX / 10)
return 2147483647;
else if(result*10 > INT_MAX - value)
return 2147483647;
result = result * 10 + value;
}
continue;
}
//other character.
break;
}
return result;
}
};