这道题跟算法关系不大,主要是注意特殊输入和溢出问题
1.考虑空输入 全空格输入 第一个非空格字符不为符号位或数字
2.跳过前面非数字后,遍历所有数字,ans=10*ans+(str[i]-'0') ans初值为0 计算过程中考虑溢出,因为这里是INT型溢出,计算过程中用Long类型保存再判断可以节约时间
代码如下
class Solution {
public:
int myAtoi(string str) {
if(empty(str)) //空字符串
return 0;
int i,n,sign=1;
for(i=0;isspace(str[i]);i++) //跳过空格
if(i>str.length())
return 0;
if(str[i]=='-')
{
sign=-1;
i++;
if(!isdigit(str[i]))
return 0;
}
if(str[i]=='+')
{
sign=1;
i++;
if(!isdigit(str[i]))
return 0;
}
for(n=0;isdigit(str[i]);i++)
{
n=10*(long)n+(str[i]-'0');
if(n%10!=(str[i]-'0'))
return sign>0?INT_MAX:INT_MIN; //判断溢出
}
return sign*n;
}
};