力扣:面试题67. 把字符串转换成整数

写一个函数 StrToInt,实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。
首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。
当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。
该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被忽略,它们对于函数不应该造成影响。
注意:假如该字符串中的第一个非空格字符不是一个有效整数字符、字符串为空或字符串仅包含空白字符时,则你的函数不需要进行转换。
在任何情况下,若函数不能进行有效的转换时,请返回 0。
说明:
假设我们的环境只能存储 32 位大小的有符号整数,那么其数值范围为 [−231,  231 − 1]。如果数值超过这个范围,请返回  INT_MAX (231 − 1) 或 INT_MIN (−231) 。

示例 1:

输入: "42"
输出: 42
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/ba-zi-fu-chuan-zhuan-huan-cheng-zheng-shu-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

class Solution {
public:
	int strToInt(string str) {
		int len = str.length();
		int ans = 0;

		int index = 0;

		//去掉开头的空白字符
		while (str[index] == ' ')
		{
			index++;
		}

		// 获取有效字段
		string buff = "";

		//判断字段的长度是否为零
		if (str.length() == 0)
			return 0;

		//但是没有检测‘++’的情况
		if (str[index] == '+' || str[index] == '-' || str[index] >= '0' && str[index] <= '9')
		{
			for (int i = index; i < len; ++i)
			{
				if (str[i] >= '0' && str[i] <= '9')
					buff += str[i];
				else if (index != i)
					break;
			}
		}
		else
			return 0; //不可转义字符

		//将buff转换为INT数字
		for (int i = buff.length() - 1; i >= 0; --i)
		{
			if (buff[i] >= '0' && buff[i] <= '9')
			{
				if (ans + (int)((buff[i] - '0') * pow(10, buff.length() - i - 1)) >= ans)
					ans += (int)((buff[i] - '0') * pow(10, buff.length() - i - 1));
				else
				{
			        if(str[index] == '-')
			        	return  INT_MIN;
			        else
			          	return  INT_MAX;
				}
			}
		}
        
		//判断正负数
		if (str[index] == '-')
			ans *= -1;

		if (ans > INT_MAX)
			return INT_MAX;
		else if (INT_MIN > ans)
			return INT_MIN;
		else
			return ans;
	}
};

没什么特别的技巧就是一个稍微复杂一点的判断,关键是检测越界的过程。

但是还是有一点问题就是如果正好是3*INT_MAX的话,不会有越界的提示。

你可能感兴趣的:(LeetCode)