LeetCode 08. String to Integer (atoi)

8. String to Integer (atoi)

思路

实现atoi函数,即将字符串转换为对应数字。

atoi()函数用来将字符串转换成整数(int),其原型为:
int atoi (const char * str);
atoi函数会扫描参数 str 字符串,跳过前面的空白字符(例如空格,tab缩进等),
直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时(’\0’)才结束转换,并将结果返回。

按照上面的说明转换即可(题目说了空白字符只考虑空格),为了防止溢出将结果用long long型存放。

C++

class Solution {
private:
    int char2digit(const char c){ // 将字符转换为对应数字,若非数字则返回-1
        if(c >= '0' && c <= '9') return int(c - '0');
        return -1;
    }
public:
    int myAtoi(string str) {
        long long res = 0;
        int len = str.size(), i = 0, minus_sign = 0;
        while(i < len && str[i] == ' ') i++;
        if(i < len && (str[i] == '-' || str[i] == '+'))
            if(str[i++] == '-') minus_sign = 1;

        while(i < len){
            int digit = char2digit(str[i]);
            if(digit == -1) break;
            res  = res * 10 + digit;
            if(minus_sign == 1 && -res < INT_MIN) return INT_MIN;
            else if(minus_sign == 0 && res > INT_MAX) return INT_MAX; 
            i++;
        }
        return minus_sign == 1 ? -res: res;
    }
};
class Solution {
public:
    int myAtoi(string str) {
        int flag = 1;
        int num = 0;
        int i = 0;
        const int len = str.size();
        while(str[i] == 32 && i < len) ++ i;
        if(str[i] == '+'){
            ++ i;
        }else if(str[i] == '-'){
            flag = -1;
            ++ i;
        }
        for(; i < len; ++ i){
            if(!isdigit(str[i])) break;
            if(num > INT_MAX/10 || (num == INT_MAX/10 && (str[i] - '0') > INT_MAX%10)){
                return flag == 1 ? INT_MAX:INT_MIN;
            }
            num = num * 10 + (str[i] - '0');
        }
        return num * flag;
    }
       
};
发布了29 篇原创文章 · 获赞 11 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/HaoTheAnswer/article/details/104320383
今日推荐