字符串转换整数 (atoi)

按照题目要求首先解决了开始是空格的情况,然后开始判断第一个是不是‘+’或‘-’,之后就是转换过程遇到字符就结束。

特别的是越界问题,按要求分别考虑最小越界和最大越界,我是先判断在越界之前一个数是不是超过了最大值/10,如果相等再判断再加一个数之后是否会越界。

代码如下:

class Solution {
public:
    int myAtoi(string str) {
        if(str.empty()) return 0;
        int i=0;
        for(auto c: str){
            if(isgraph(c))//bushikongge
                break;
            i++;
        }
        if(i==str.size()) return 0;
        int number=0;
        bool flag=false;
        if(str[i]=='-') {
            flag=true;
            i++;
        }
        else if(str[i]=='+') i++;
        int a;
        for(;i<str.size();i++){
            a=number;
            
            if(isdigit(str[i]))  { 
                if(number>INT_MAX/10) {
                    if(flag) return INT_MIN;
                    else return INT_MAX;
                } 
                if(number==INT_MAX/10){
                    if(!flag){
                        if(str[i]-'0'>INT_MAX%10) return INT_MAX;
                    }
                    else if(str[i]-'0'>INT_MAX%10+1) return INT_MIN;
                }
                number=number*10-'0'+str[i];
               
            }
            else break;
        }
        if(flag) return -(number);
        else return number;
    }
};

猜你喜欢

转载自www.cnblogs.com/zhengwanning/p/10311645.html
今日推荐