原题目链接 8. 字符串转换整数 (atoi) - 力扣(LeetCode) (leetcode-cn.com)
一、思路
这是一道模拟题,细节多,容易出错,容易修修补补搞坏心态,让代码混乱不规整。中间有个溢出处理的问题(这题烂掉了hhh,代码零乱不堪,已经不想改啦)。
还是要注意防溢出问题,转换表达式,这一题还涉及到无符号数变为有符号数时的转换溢出,已经麻掉了。感觉修修补补的代码还是有漏洞,不过LeetCode已经过了。
二、代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | class Solution { public: int myAtoi(string s) { long long res = 0; bool sign = true,sFlag = true, begin = true; for(int i = 0; i < s.size(); i ++){ if(s[i] == ' ' && begin)continue;//处理空格 if(begin && sFlag && s[i] == '+'){ sFlag = false; begin = false; continue; } if(begin && sFlag && s[i] == '-'){ sFlag = false; sign = false; begin = false; continue;//不要忘记 }//处理符号 if(s[i] <= '9' && s[i] >= '0'){ begin = false; if(sign == false && res * 10 + INT_MIN > s[i] - '0') return INT_MIN; if(sign == true && res > (INT_MAX - (s[i] - '0'))/10) return INT_MAX;//多加的一步防溢出,可是运算式在后面,最后还得再加一遍 res = res * 10 + (s[i] - '0'); } else break; } if(sign == false && res + INT_MIN > 0) return INT_MIN; if(sign == true && res > INT_MAX) return INT_MAX; return sign?res:-res; } }; |