Leetcode-8. String to Integer (atoi)(字符串转整数)

Leetcode-8. String to Integer (atoi)

Implement atoi which converts a string to an integer.

The function first discards as many whitespace characters as necessary until the first non-whitespace character is found. Then, starting from this character, takes an optional initial plus or minus sign followed by as many numerical digits as possible, and interprets them as a numerical value.

The string can contain additional characters after those that form the integral number, which are ignored and have no effect on the behavior of this function.

If the first sequence of non-whitespace characters in str is not a valid integral number, or if no such sequence exists because either str is empty or it contains only whitespace characters, no conversion is performed.

If no valid conversion could be performed, a zero value is returned.

Note:

  • Only the space character ' ' is considered as whitespace character.
  • Assume we are dealing with an environment which could only store integers within the 32-bit signed integer range: [−231,  231 − 1]. If the numerical value is out of the range of representable values, INT_MAX (231 − 1) or INT_MIN (−231) is returned.

Example 1:

Input: "42"
Output: 42

Example 2:

Input: "   -42"
Output: -42
Explanation: The first non-whitespace character is '-', which is the minus sign.
             Then take as many numerical digits as possible, which gets 42.

Example 3:

Input: "4193 with words"
Output: 4193
Explanation: Conversion stops at digit '3' as the next character is not a numerical digit.

Example 4:

Input: "words and 987"
Output: 0
Explanation: The first non-whitespace character is 'w', which is not a numerical 
             digit or a +/- sign. Therefore no valid conversion could be performed.

Example 5:

Input: "-91283472332"
Output: -2147483648
Explanation: The number "-91283472332" is out of the range of a 32-bit signed integer.
             Thefore INT_MIN (−231) is returned.

解题分析:

首先注意一下几点:

  • 该函数首先要剔除字符串前后的空白字符,从第一个非空白字符开始,并且第一个字符可能是'+'或'-';

  • 该字符串中间可能包含非数字字符串,则忽略掉此字符及其后续字符,并不影响函数的转换;

  • 如果字符串首个非空白字符不是有效的数字或'+'、'-',则转换失败;

  • 如果字符串转换失败,则返回0,如果转换的数字越界,则返回为INT_MAX(2147483647)或者INT_MIN(-2147483648)。

class Solution {
public:
	int myAtoi(string str) {
		int num=0;
		int sign=1;
		int n = str.size();
		int i = 0;

		while (i<n&&str[i]==' ')
			++i;
		if (i >= n)
			return 0;
		if (str[i] == '+')
			++i;
		else if (str[i] == '-')
		{
			++i;
			sign = -1;
		}

		for (; i < n; ++i)
		{
			if (str[i]<'0' || str[i]>'9')
				break;
			if (num > INT_MAX / 10 || (num == INT_MAX / 10 && (str[i] - '0') > INT_MAX % 10))
			{
				return sign == -1 ? INT_MIN : INT_MAX;
			}
			num = num * 10 + str[i] - '0';
		}
		return num * sign;
	}
};


















猜你喜欢

转载自blog.csdn.net/alatebloomer/article/details/80277134
今日推荐