剑指Offer第四十九题:把字符串转换成整数

版权声明:欢迎交流,本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_42513339/article/details/89285884

题目描述

将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。

思路:判断正负什么的都很简单,我这里直接用了两个标志位。

主要需要判断是否超出int的上限,所以输入先用一个long long代替。

代码如下:

class Solution {
public:
    int StrToInt(string str) {
        long long ans = 0;
        int len = str.length();
        int flag1 = 0,flag2 = 0;
        for(int i = 0; i<len; i++)
        {
            if(i==0 && str[i] == '+')
            {continue;}
            else if(i==0 && str[i] == '-')
            {flag2 = 1;continue;}
            
            if(str[i]>='0' && str[i]<='9'){
                if(flag1){
                    ans += (str[i]-48)*pow(10,(len-1-i));
                    //对数字是否溢出进行判断
                    if((ans>0x7FFFFFFF)||(ans<(signed int)0x80000000)){
                        return 0;
                    }
                }
                if(flag1 == 0 && str[i] != 48){
                    flag1 = 1;
                    ans += (str[i]-48)*pow(10,(len-1-i));
                }
            }
            else
                return 0;
        }
        if(flag2 == 1)
            return -ans;
        return ans;
    }
};

猜你喜欢

转载自blog.csdn.net/weixin_42513339/article/details/89285884