LeetCode系列之【8.字符串转整数(atoi)】C++ 经验总结

我是代码小白一个,但是本科传统机械专业,研究生是车联网,需要学习C++,但是也需要转行,所以学习完基础开始刷题力扣,

很多不懂的地方也是站在前辈的肩上学习,先自己思考编写在VS上,然后实现不了再看别人的文章,可能别人没法注解全部的语句,那我为大家解惑就

一个个进行注解方便阅读,可能有些人读不懂我写的,欢迎留言。

class Solution {
public:
int myAtoi(string s) {
int flag = 0; //设置字符串的正负属性标志

	long result = 0;                                  //设置最后输出的结果

	for (int i = 0; i < s.size(); i++)                //对长度为s.size的字符串进行逐个字符i读取
	{
		if (flag == 0)                                //这个if是判定字符串s的第一个字符是属于什么 正号、符号、空号、数字?!!!!!
		{
			                                          // 不管什么结束判定后标志更新 不为0 而继续for循环而判定下一个字符 进入else判定!

			if (s[i] == '-')                          //第一个非空字符 若为负号 则标志更新为 -1
				flag = -1;
			else if (s[i] == '+')                     //第一个非空字符 若为正号 则标志更新为  1
				flag = 1;
			else if (s[i] == ' ')                     //第一个非空字符 若为空号 则继续判断下一个字符
				continue;
			else if (s[i] <= '9' && s[i] >= '0')      //第一个非空字符 若为数字范围内的就输出result 并强调标志更新其就为正数 +1
			{
				result = s[i] - '0';
				flag = 1;
			}
			else return 0;
		}
		else                                          //排除第一个字符后 flag更新 而进入判定第二个字符及后的else语句
		{   
			if (s[i] <= '9' && s[i] >= '0') 
			{
				result = result * 10 + s[i] - '0';    //就是逐个升位累加 可以在草稿纸上进行数学复现

				if (result * flag > INT_MAX)          //溢出可以通过获取INT_MAX和INT_MIN来辅助判断
					return INT_MAX;

				if (result * flag < INT_MIN) 
					return INT_MIN;
			}
			else return result * flag;
		}
	}
	return result * flag;                             //for循环完毕后返回整体的最终结果
}

};

原文章的大佬:https://blog.csdn.net/weixin_38715903/article/details/80674737?utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EOPENSEARCH%7Edefault-1.control&dist_request_id=&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EOPENSEARCH%7Edefault-1.control

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值