把字符串转换成整数(atoi)

last modify

把字符串转换成整数(atoi)_牛客题霸_牛客网

问题简述

写一个函数 StrToInt,实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。传入的字符串可能有以下部分组成:
1.若干空格
2.(可选)一个符号字符('+' 或 '-')
3. 数字,字母,符号,空格组成的字符串表达式
4. 若干空格

思路

  • 设定一个指针逐字符处理;

Python
class Solution:
    def StrToInt(self , s: str) -> int:
        
        N = len(s)
        if N <= 0: return 0

        p = 0
        sign = 1
        
        # 注意越界判断
        # 跳过空格
        while p < N and s[p] == ' ': p += 1
        if p < N and s[p] == '-': sign = -1
        if p < N and s[p] in ('-', '+'): p += 1
        
        flag = False
        ret = 0
        while p < N and '0' <= s[p] <= '9':
            ret = ret * 10 + int(s[p])
            if ret >= 2 ** 31:  # python 没有越界,人工判断
                flag = True
                break
            p += 1
        
        if flag:
            return 2 ** 31 - 1 if sign == 1 else -2 ** 31

        return ret * sign
C++
class Solution {
public:
    int StrToInt(string str) {
        // write code here
        int n = str.length();
        if (n < 1) return 0;
        
        int p = 0;      // 模拟指针
        int sign = 1;   // 正负
        
        // C++ 字符串不需要越界判断
        while (isspace(str[p]))  p++;  // 跳过前置空格
        if (str[p] == '-') sign = -1;
        if (str[p] == '-' || str[p] == '+') p++;
        
        int ret = 0;
        while (str[p] >= '0' && str[p] <= '9') {
            int new_ret = ret * 10 + str[p] - '0';
            if (new_ret / 10 != ret) {  // 越界判断
                return sign > 0? INT_MAX : INT_MIN;
            }
            ret = new_ret;
            p++;
        }
        
        return sign * ret;
    }
};

Last updated