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.
分析:
这一题重点在于如何处理字符串,需要考虑异常,比如12a213,这个处理后的结果为12。也需要去除前部的空格。如果过大,输出INT_MAX,过小,输出INT_MIN。
附上代码:
class Solution {
public:
int myAtoi(string str) {
int s=0;
while(str[0]==' ')
str=str.erase(0,1);
int flag=1;//+ -
if(str[0]=='+')
str=str.erase(0,1);
else if(str[0]=='-')
{
flag=-1;
str=str.erase(0,1);
}
int weishu=0;
for(int i=0;i<str.size();i++)
{
if(str[i]-'0'>=0&&'9'-str[i]>=0){
weishu++;
}
else break;
}
str=str.substr(0,weishu);
if((str.size()>10)||(str.size()==10&&str>"2147483647")){
if(flag==1)
return INT_MAX;
else
return INT_MIN;
}
for(int i=str.size()-1;i>=0;i--)
{
s+=(str[i]-'0')*pow(10,str.size()-i-1);
}
return s*flag;
}
};