LeetCode刷题之字符串转换整数(atoi)

  1. 题目描述:
    请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。
    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/string-to-integer-atoi
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

  2. 解题思路:
    先对开头的空格进行处理,把空格都消除,然后判断接着的这个字符是数字,“+”或者“-” 或者是其他的字符,如果是数字则直接进行后面的处理直到字符是非数字结束,如果是其他字符则直接返回0,这里要注意的是要考虑溢出的问题。

  3. 解题代码:

int myAtoi(string s) {
    
    
        const int MAX = pow(2.0,31)-1;
        const int MIN = (-1)*pow(2.0,31);
        int len = s.size();
        int i = 0;
        int flag = 1;
        long count = 0.0;
        //1,丢弃前导空格
        while(s[i] == ' '){
    
    
            i++;
        }
        //2,判断正负号
        if(i == len || isNumberOrSymbol(s[i]) == 0){
    
    
            return 0;
        }
        if(s[i]=='-' || s[i] == '+'){
    
    
            flag = flag * (',' - s[i]) ;
            i++;
        }
        while( isdigit(s[i]) && i<len){
    
    
            count = count*10 + (s[i] - '0');
            //判断是否溢出
            if(count > MAX && flag == 1){
    
    
                return MAX;
            }
            if(count > MAX && flag == -1){
    
    
                return MIN;
            }
            i++;
        }
        return count*flag;
    }


    //判断一个字符是否是数字或者是正负号 ascii码在48 ~ 57
    int isNumberOrSymbol(char x){
    
    
        int tmp = (int)x;
        if(tmp>=48 && tmp <=57){
    
    
            return 1;
        }else if(x == '+' || x == '-'){
    
    
            return 1;
        }else{
    
    
            return 0;
        }
    }
  1. tips:
    在这个题目中会涉及到判断这个字符是“+”或者是“-”来进行flag的设置,可以利用“+”的ascii码是43,“ ,” 的是44,“ - ”的是45来进行简便的设置。
    字符与字符直接相减的到的是着两个字符acsii码的差值(int型),可以利用 s[i] - '0 ’ 来将字符型数字转化成整形的数字。
//设置flag
if(s[i]=='-' || s[i] == '+'){
    
    
            flag = flag * (',' - s[i]) ;
            i++;
        }

猜你喜欢

转载自blog.csdn.net/qq_43964318/article/details/119767957
今日推荐