此题没什么算法,单纯就是考虑细节。
- C语言版
int myAtoi(char* str) {
if(strlen(str)==0)
return 0;
char* xianzai= str;
long long fanhui = 0;
int flag = 1;//记录符号位正负
long long max = pow(2,31)-1;
long long min = pow(2,31);//溢出的上下界不相同
while (*xianzai == ' ')
{
xianzai++;//跳过空格位置
}
if (*xianzai == '-')
{
flag = -1;
xianzai++;
}
else if(*xianzai == '+')
{
xianzai++;
}
else if (*xianzai < '0' || *xianzai > '9')
{
return 0;
}
while (*xianzai >= '0' && *xianzai <= '9')
{
fanhui= fanhui*10;
fanhui=fanhui+*xianzai-'0';//利用符号本身的ascii码直接转换成数字
if(flag==1 && fanhui>max)
{
//正数溢出,返回INT_MAX
return max;
}
else if(flag==-1&&fanhui>min)
{
return min;//注意int类型上下界数值上相差1
}
xianzai++;
}
return flag*fanhui;
}