字符串转数字(atoi)

string-to-integer-atoi

http://www.nowcoder.com/questionTerminal/44d8c152c38f43a1b10e168018dcc13f

这道题目玄之又玄,大家记住步骤就好啦:

  1. 处理空字符串
  2. 忽略前置空格
  3. 保存符号
  4. 处理非法输入
  5. 处理溢出

多想无益,就住就行了。

class Solution {
public:
    int atoi(const char *str) {
        int idx = 0, sign = 1, val = 0;
        // 1. 空字符串
        if (strlen(str) == 0) return 0;
        // 2. 忽略前置0
        while (str[idx] == ' ') ++idx;
        // 3. 记录符号
        if (str[idx] == '-') {sign = -1; ++idx;}
        if (str[idx] == '+') {++idx;}
        for (; idx < strlen(str); ++idx) {
            // 4. 处理非法值
            if (str[idx] > '9') break;
            // 5. 处理溢出
            if (val > INT32_MAX / 10 || (val == INT32_MAX / 10 && INT32_MAX % 10 < str[idx] - '0')) {
                return sign == 1 ? INT32_MAX : INT32_MIN;
            }
            val = val * 10 + str[idx] - '0';
        }
        return val * sign;
    }
};
刷遍天下无敌手 文章被收录于专栏

秋招刷题历程

全部评论
"117e40091539" 不符合
点赞 回复 分享
发布于 2021-04-04 23:04
INT_MAX之类的可以替换成std::numeric<int>::max()</int>
点赞 回复 分享
发布于 2021-03-11 14:47
溢出处理没看懂qwq
点赞 回复 分享
发布于 2021-03-10 20:56
还有 +-123是个非法输入
点赞 回复 分享
发布于 2021-01-06 12:54
str[idx] > '9'
点赞 回复 分享
发布于 2020-09-24 19:25

相关推荐

04-22 15:13
已编辑
Java
点赞 评论 收藏
分享
03-28 19:11
铜陵学院 C++
有礼貌的山羊追赶太阳:太典了,连笔试都没有开始就因为HC满了而结束了,而且还卡你不让你再投其他部门的。
点赞 评论 收藏
分享
评论
32
2
分享

创作者周榜

更多
牛客网
牛客企业服务