字符串转整数 (atoi)

字符串转整数 (atoi)
字符串转整数 (atoi)

class Solution {
public:
    int myAtoi(string str) {
    int length,i=0,p;
    int start,end;  //指向数字部分的开头和结尾下标
    length==str.length();  //字符串的长度
    while(str[i]==' ')  //跳过去前面的空格字符
        i++;
    if(str[i]>='0'&&str[i]<='9'){  //如果空格字符后面直接是数字部分
        while(str[i]=='0')  //刚开始的0不用算进去有效数字部分的,跳过去
            i++;
            p=0;    //判断是正数还是负数,0代表正数,1代表负数
            start=i;   //有效数字开始的下标
            while(str[i]>='0'&&str[i]<='9'){
                i++;
            }
            end=i-1;   //有效数字结束的下标
       
    }else if(str[i]=='+'||str[i]=='-'){  //如果空格字符后面是'+'或者'-'
        if(str[i]=='+')
            p=0;   //正数
            else
            p=1;   //负数
            ++i;
            while(str[i]=='0')   //去掉'+'、'-'号后面刚开始的无效的0数字
            i++;
            start=i;   //有效数字的开始下标
            while(str[i]>='0'&&str[i]<='9'){
                i++;
            }
            end=i-1;   //有效数字的结束下标
        
    }else   //如果空格字符后面不是上述的情况,返回0
    return 0;
       if(end-start+1>10)   //有效数字部分的长度,大于10意味无法用int存储
        {
            if(p==0)   //正数
            return INT_MAX;
            else   //负数
            return INT_MIN;
        }
        else{
        long ans=0;   //用长整数ans存储有效数字构成int的值
        for(i=start;i<=end;i++)
        ans=ans*10+str[i]-'0';
        if(p==0&&ans<=INT_MAX)  //正数且小于INT_MAX,肯定返回自身了
            return ans;
        else if(p==0&&ans>INT_MAX)  //整数但是超范围了,返回INT_MAX
            return INT_MAX;
        else if(p==1&&ans<=2147483648)   //负数但是没有超范围,返回自身
            return -1*ans;
        else if(p==1&&ans>2147483648)    //负数超范围,返回INT_MIN
            return INT_MIN;
        }
}
};

字符串转整数 (atoi)

另外,大家如果想要加快自己代码的运行时间,可以尝试在类外面加下面代码:

static auto _=[]()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    return 0;
}();

字符串转整数 (atoi)
其实我感觉上面的代码思路还是比较顺的,大家有什么问题可以提出来,哈哈!

初学者,代码如有错误,欢迎大家指出!