Leetcode:字符串转整数

解法

这道题的测试案例十分的多,每次总以为万无一失的情况下,突然报个bug告诉你有个地方没有考虑到。到最后发现整数溢出的情况,下面的代码不能用了,所以只好换个思路

class Solution {
public:
    int myAtoi(string str) {
	long long res = 0;
	int flag = 1;
	int j=0;
	while (str[j] == ' ')
	{
		++j;
	}
	if (str[j] == '-')
	{
		flag = -1;
		++j;
	}
	else
	{
		if (str[j] == '+')
			++j;
		else if (str[j]<'0' || str[j]>'9')
			return 0;
	}

	int i = j;
	while (str[i]>='0' && str[i]<='9')
	{
		res = res * 10 + (str[i] - '0');
		++i;
	}
	res = flag * res;
	if (res < INT_MIN)
		res = INT_MIN;
	if (res > INT_MAX)
		res = INT_MAX;

	return res;
}
};

AC代码:

class Solution {
public:
    int myAtoi(string str) {
        	if (str.empty()) return 0;
	int sign = 1, base = 0, i = 0, n = str.size();
	while (i < n && str[i] == ' ') ++i;
	if(str[i]=='+' || str[i] == '-')
	{
		sign = (str[i++] == '+') ? 1 : -1;
	}
	while (i < n && str[i] >= '0' && str[i] <= '9')
	{
		if (base > INT_MAX / 10 || (base == INT_MAX / 10 && str[i] - '0' > 7))
		{
			return (sign == 1) ? INT_MAX : INT_MIN;
		}
		base = 10 * base + (str[i++] - '0');
	}
	return base * sign;	
    }
};
posted @ 2018-10-08 11:25  MrYun  阅读(101)  评论(0)    收藏  举报