美文网首页OJ
剑指Offer(T49)把字符串转换成整数

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

作者: wuzhiguo | 来源:发表于2017-05-27 11:21 被阅读24次

题目

把字符串转换成整数

注意的地方

  • 测试用例
    功能测试:+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;
    }

相关文章

网友评论

    本文标题:剑指Offer(T49)把字符串转换成整数

    本文链接:https://www.haomeiwen.com/subject/zktqfxtx.html