1.把一个字符串转为整数

2020-03-26  本文已影响0人  红豆豆

#include <iostream>

#include <string>

using namespace std;

class Solution {

public:

    enum Status { kValid = 0, kInvalid };

    int g_nStatus = kValid;

    int StrToInt(string str) {

        g_nStatus = kInvalid;

        long long num = 0;

        const char* cstr = str.c_str();

        // 1.指针为NULL或空字符处理

        if ((cstr == NULL) || (*cstr == '\0'))

        {

            return 0;

        }

        // 2.正负号处理

        int minus = 1;

        if (*cstr == '-')

        {

            minus = -1;

            cstr++;

        }

        else if (*cstr == '+')

            cstr++;

        // 迭代字符串

        while (*cstr != '\0')

        {

            // 3.非数字异常字符处理

            if (*cstr < '0' || *cstr > '9')

            {

                g_nStatus = kInvalid;

                num = 0;

                break;

            }

            // 4.核心逻辑

            g_nStatus = kValid;

            num = num * 10 + (*cstr - '0');

            cstr++;

            // 5.数据溢出处理

            if (((minus > 0) && (num > 0x7FFFFFFF)) ||

                ((minus < 0) && (num > 0x80000000)))

            {

                g_nStatus = kInvalid;

                num = 0;

                break;

            }

        }

        // 5.后处理,增加正负号

        if (g_nStatus == kValid)

            num = num * minus;

        return (int)num;

    }

};

上一篇下一篇

猜你喜欢

热点阅读