8. String to Integer (atoi)
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.
class Solution {
public:
int myAtoi(string str) {
long result=0;
if(str.empty())
return result;
bool flag=true;//正负符号位标志
int i=0;
while(i<str.size()&&str[i]==' ')//剔除数字之前的空格
i++;
for(int j=i;j<str.size();j++)
{
if(j==i)//符号位四种情况下的处理
{
if(str[j]=='-')//情况1:'-'
flag=false;
else if(str[j]=='+')//情况2:'+'
flag=true;
else if(str[j]>='0'&&str[j]<='9')//情况3:数字
{
result=result*10+str[j]-'0';
flag=true;
}
else//情况4:其他错误输入情况,返回0
return 0;
continue;
}
if(str[j]>='0'&&str[j]<='9')//当为数字时
{
result=result*10+str[j]-'0';
if(flag&&result>INT_MAX)//如果输入数字越界,则输出边界值
return INT_MAX;
else if(!flag&&(-result<INT_MIN))
return INT_MIN;
}
else//当非数字时,直接输出之前计算得到结果
{
result=flag?result:-result;
if(flag)
return (result>INT_MAX)?INT_MAX:result;
else
return (result<INT_MIN)?INT_MIN:result;
}
}
result=flag?result:-result;//输出最终的结果
if(flag)
return (result>INT_MAX)?INT_MAX:result;
else
return (result<INT_MIN)?INT_MIN:result;
}
};