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

#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;

    }

};

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容