伪代码思路:
第一步:检测输入字符串是否为空字符串;
if(str.empty()) return 0;
第二步:
检索有效输入:
int i=0;
while(str[i]==' '&&str[i]!='\0')
i++;
循环后i所在的位置即为有效字符所在的位置。
if(str[i]=='\0')
{return 0};
第三步:检查数字符号:
if(str[i]=='+')正i++
if(str[i]=='-') 负i++
//开始转换;
int max=ox7fffffff //表示最大的int 32字节符号为为0,表示正数;
int min=ox800000000;//表示下届 负数;
long sum =0;
while( str[i]!='\0')
{
if(str[i]>'0'&&str[i]<'9')
{
sum=sum*10+signal*(str[i]-'0'); //字符数字对应相减,其实对应的是它们的码值相减,差值为对应的数值之差;
}
esle
return sum;
//第五步:时刻检测数字是否溢出:
if (sum > max || sum < min) //溢出处理
return sum > 0 ? max : min;
++i;
}
return sum;
class Solution {
public:
int myAtoi(string str) {
if (str.empty()) //空字串
return 0;
//忽略前缀空格
int i = 0;
while (str[i] != '\0' && str[i] == ' ')
++i;
if (str[i] == '\0')
return 0;
int max = 0x7fffffff;
int min = 0x80000000;
int signal = 1;
//处理+、-号
if (str[i] == '+')
{
signal = 1;
++i;
}
else if (str[i] == '-')
{
signal = -1;
++i;
}
//转换整数
long long sum = 0;
while (str[i] != '\0')
{
if (str[i] >= '0' && str[i] <= '9')
sum = sum * 10 + signal * (str[i] - '0');
else
return sum;
if (sum > max || sum < min) //溢出处理
return sum > 0 ? max : min;
++i;
}
return sum;
}
};