Problem Description
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.
Some Details
- #8 is similar to #65, you need to be careful enough, and accept them.
- To make a list before coding. If you still can’t pass it, fuck the problem and try next company later.
Solution
My list:
- Range of numbers. INT is in the range of -2^63 to 2^63-1. Make sure if the number is in this range.
- Format of the string. The users may press some nonnumeric characters before or after the number. Ignore them.
- Symbol. ‘+’ or ‘-’ can appear once before the number.
- Illegal string. At this time, illegal string is equal to the string which has no digit. We can distinguish even one digit among mistake characters, but 0 is returned if there is no digit.
Problems like #8 is just difficult to start thinking, but it will be much easier if you start with this: What will I do if I work with a calculater, atoi function, …?
Code
class Solution {
public:
int myAtoi(string str)
{
long long ma=2147483647,mi=-2147483648;
int l=0,r=str.length()-1;
while (str[l]==' ' && l<=r) l++;
if (l>r) return 0;
bool pp=false;
if (str[l]=='-' || str[l]=='+')
{
if (str[l]=='-') pp=true;
l++;
}
long long now=0,e=0; bool pe=false;
for (int i=l;i<=r;i++)
{
if (str[i]<'0' ||str[i]>'9') break;
now=now*10; now=now+str[i]-'0';
if (pp)
{
if (now*(-1)<mi) return mi;
} else
if (now>ma) return ma;
}
if (pp) return now*(-1); else return now;
}
};