美文网首页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