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 theC++function had been updated. If you still see your function signature accepts aconst char *argument, please click the reload buttonto reset your code definition.
spoilers alert... click to show requirements for atoi.
Subscribeto see which companies asked this question.
Show Tags
Show Similar Problems
题意:
就是自己实现atoi,这题最坑的是越界的时候应该返回最大或最小值max_int 与min_int,但题目中没有提示——当然这样设计的一个目的可能是防止刷题人直接调用itoa函数。注意 后面有字符时,直接跳出输出前面的数,与atoi一致。
我的做法是定义long long型,超限时break。
class Solution {
public:
int myAtoi(string s) {
long long rst=0,i=0;
bool normal=true;
int s1=1;
while(s[i]==' ') i++;
if(s[i]=='-') {s1=-1; i++;}
else if(s[i]=='+') i++;
while(i!=s.size()){
if(s[i]<='9'&&s[i]>='0')
{rst=rst*10+s[i++]-'0';
if(rst>(long long)INT_MAX+1LL) break;
}
else if(s[i]=='+'||s[i]=='-')
{normal=false;
break;
}
else break;
}
if(!normal) return 0;
rst=rst*s1;
if(rst<INT_MIN) return INT_MIN;
if(rst>INT_MAX) return INT_MAX;
return rst;
}
};