剑指offer之 把字符串转换成整数

题目描述

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

思路

由于字符串可能首位带+或-,则需要先判断首位是否为+,-,数字或其他字符,若为其他字符,则return 0, 否则分为3类,并移除标志位
其次对字符串求和,需要注意的是最终返回的是int,int是有界的,为了防止溢出,我们用long long,最后判断是否超出int,若超出返回0否则返回即可

代码

class Solution {
public:
    int StrToInt(string str) {
        long long res = 0;
        int sign = 0;
        if(str[0]>'9')
            return 0;
        if(str[0]=='-')
        {
		str.erase(str.begin());
		sign = 2;
	    }
        else if(str[0]=='+')
        {
		str.erase(str.begin());
		sign = 1;
	    }
        if(sign == 0)
        {
            res = add(str);
        }
        else if(sign == 1)
        {
            res = add(str);
        }
        else if(sign == 2)
        {
            res = -add(str);
        }
        if(res>2147483647 || res<-2147483648)
            return 0;
        else
            return res;
    }
    long long add(string str)
    {
        long long res = 0;
        for(int i = 0; i < str.size();i++)
            {
                if(str[i]>'9' || str[i]<'0')
                {
                    return 0;
                }
                else
                {
                    res += (str[i] - '0') * pow(10,str.size()-i-1);
                }
            }
            return res;
    }
};
发布了85 篇原创文章 · 获赞 0 · 访问量 409

猜你喜欢

转载自blog.csdn.net/weixin_38312163/article/details/104743721