题解 | #把字符串转换成整数(atoi)#

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

https://www.nowcoder.com/practice/d11471c3bf2d40f38b66bb12785df47f

#include <cstdint>
#include <string>
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param s string字符串 
     * @return int整型
     */
#define INT_MAX ((1<<31) -1)
#define INT_MIN (- (1 << 31))

    int StrToInt(string s) {
        if (s.empty())
        {
            return 0;
        }

        string str_tmp = s;
        int i = 0;

        //去掉无用的前导空格
        for (; i < str_tmp.length(); i++) {
            if (str_tmp[i] != ' ')
            {
                break;
            }
        }

        str_tmp = str_tmp.substr(i, str_tmp.length() - i);

        if (str_tmp.empty())
        {
            return 0;
        }

        //是否正数
        bool bFalg = true;

        if (str_tmp[0] == '-') {
            bFalg = false;
            str_tmp = str_tmp.substr(1, str_tmp.length() - 1);
        }
        else if (str_tmp[0] == '+') {
            bFalg = true;
            str_tmp = str_tmp.substr(1, str_tmp.length() - 1);
        }

        if (str_tmp.empty())
        {
            return 0;
        }

        for (i = 0; i < str_tmp.length(); i++) {
            if (str_tmp[i] < '0' || str_tmp[i] > '9')
            {
                break;
            }
        }

        //去掉后面存在多余的字符
        str_tmp = str_tmp.substr(0, i);

        if (str_tmp.empty())
        {
            return 0;
        }

        int64_t ret64 = 0;
        for (i = 0; i < str_tmp.length(); i++)
        {
            ret64 = ret64 * 10 + (str_tmp[i] - '0');
            if (bFalg) 
            {
                if (ret64 > INT_MAX)
                {
                    return INT_MAX;
                }
            }
            else
            {
                if (ret64 * -1 < INT_MIN)
                {
                    return INT_MIN;
                }
            }
        }

        
        if (bFalg) {
            return (int)ret64;
        }

        return ret64 * -1;
    }
};

全部评论

相关推荐

05-12 17:28
已编辑
门头沟学院 硬件开发
ldf李鑫:不说公司名祝你以后天天遇到这样的公司
点赞 评论 收藏
分享
吴offer选手:学到了,下次面试也放张纸在电脑上,不然老是忘记要说哪几个点
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务