我是代码小白一个,但是本科传统机械专业,研究生是车联网,需要学习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