剑指Offer(T49)把字符串转换成整数

题目

把字符串转换成整数

注意的地方

  • 测试用例
    功能测试:+1,1,0,-1
    边界测试:键盘输入一个大于INT_MAX或者小于INT_MIN的数
    特殊输入:"",1a2b3c,-,+
    如果输入不是string对象,而是char *还要考虑NULL指针

  • 不要把stack.size()放到循环判断条件中,因为它有可能在循环体中被更新

  • '0''9’在内存中以ascii码存储,它的值为4857,因此,str[i]对应的数字的值为str[i] - '0'

    int StrToInt(string str) {
        if(str.size() == 0) return 0;
        
        int sign = 1;
        stack<int> ret;
        
        for(int i = 0; i < str.size(); i++){
            if(str[i] == '-'){
                sign = -1;
                continue;
            }
            if(str[i] == '+'){
                sign = 1;
                continue;
            }
            
            if(str[i] > '9' || str[i] < '0'){
                return 0;
            }
            ret.push(str[i] - '0');
        }
        int MY_INT_MAX = 0x7FFFFFFF;
        int MY_INT_MIN = 0x80000000;
        
        int res = 0;
        int base = 1;
        
        if(ret.empty()) return 0;
                
        while(!ret.empty()){
            if(res*sign > MY_INT_MAX || res*sign < MY_INT_MIN) return 0;
            res = res + base*ret.top();
            base = base*10;
            ret.pop();
        }
        return sign*(int)res;
    }

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 11,590评论 0 33
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 121,233评论 16 134
  • 若真以后工作从事这行了遇见一天打好几遍遍电话的甲方瞎逼逼不能气死
    蟹壳黄呀阅读 29评论 0 0
  • 我们都有残缺,所以我不会嫌弃抛弃你,我必须强迫自己去接受自己以及身边一切的不完美,因为生活从来都不是完美的。灵魂的...
    韩灰灰阅读 39评论 0 1