【剑指Offer-面试案例】面试题66:把字符串转为整数

题目描述

将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0

思路

首先判断该数字是整数还是负数,然后在转换的过程中判断字符串表示的数字是否溢出。题目的数字范围是有符号的int型整数,有符号的int型整数(4个字节)的范围为-2147483648 ~ +2147483647,也就是-0x80000000~0x7FFFFFFF。代码如下:

class Solution {
public:
    int StrToInt(string str) {
        if(str.empty())
            return 0;
        
        bool isNeg = false;    // 标记是否为负数
        bool index0IsNum = true;    //标记第一位是否为数字
        if(str[0]<'0' || str[0]>'9'){
            if(str[0]=='-')
                isNeg = true;
            index0IsNum = false;
        }
        
        int start = index0IsNum? 0:1; //起始的遍历位置
        long long num = 0;
        for(int i=start; i<str.length(); i++){
            if(str[i]>='0' && str[i]<='9'){
                num = num*10 + str[i] - '0';
                if((!isNeg && num>0x7FFFFFFF) || (isNeg && num>0x80000000))
                    return 0;
            }
            else return 0;
        }
        
        if(isNeg)
            return -num;
        else return num;
    }
};
posted @ 2020-03-24 18:20  Flix  阅读(162)  评论(0编辑  收藏  举报