剑指 Offer 67. 把字符串转换成整数(C++实现)

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/ba-zi-fu-chuan-zhuan-huan-cheng-zheng-shu-lcof
 

  1. 先去除前置空格
  2. 再检查是否带正负号
  3. 对一个个字符进行读取,并转换成相应的整数;在此过程中注意判断整数范围是否越界

正负整数 int 的边界不一样,要分别判断

INT_MAX:0x7fffffff                 2147483647

INT_MIN:0x80000000          -2147483648

int strToInt(string str) {

	// base case
	if (str.empty())
	{
		return 0;
	}

	int index = 0;

	// 去除前置空格
	while (index < str.size() && str[index] == ' ')
	{
		++index;
	}

	// 检查符号
	bool isMinus = false;
	if (index == str.size())
	{
		return 0;
	}
	else if (str[index] == '+')
	{
		++index;
	}
	else if (str[index] == '-')
	{
		isMinus = true;
		++index;
	}

	if (index == str.size())
	{
		return 0;
	}

	// 遍历数字
	long long num = 0;
	while (index < str.size() && str[index] >= '0' && str[index] <= '9')
	{
		num = num * 10 + str[index] - '0';
		++index;

		// 检查是否越界
		if (isMinus && num > 0x80000000)		// 负数越界
		{
			return INT_MIN;
		}
		if (!isMinus && num > 0x7fffffff)		// 整数越界
		{
			return INT_MAX;
		}
	}

	// 加上符号
	num = isMinus ? -num : num;

	return static_cast<int>(num);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值