一、运行结果
二、题目
题目较长,具体内容见:
力扣https://leetcode-cn.com/problems/string-to-integer-atoi/
三、思路
按从前往后处理字符串顺序,首先去掉前导空格符;
之后遇到的第一个非空格字符,如果是符号位的话就存储在flag中;
接下来处理连续的数字位,(前导0做同样的处理,不影响结果),直到当前当前位字符非数字为止。如果还没处理完字符串 结果就超出了int类型的表示范围,则返回结果并终止运行。
四、代码
class Solution {
public:
int myAtoi(string s) {
int len = s.size();
double ans = 0;
int i = 0;
while(s[i] == ' ') i++; //去掉前导空格符
char flag = '+';
if(s[i] == '-' || s[i] == '+'){ //符号位
flag = s[i];
i++;
}
while(s[i]>='0' && s[i]<='9'){ //逐位处理数字
ans = ans * 10 + (s[i] - '0');
if(flag == '+' && ans > INT_MAX) return INT_MAX; //超出int范围则返回并终止
if(flag == '-' && -ans < INT_MIN) return INT_MIN;
i++;
}
if(flag == '-'){
if(-ans <= INT_MIN) return INT_MIN;
else return -(int)ans;
}else{
if(ans > INT_MAX) return INT_MAX;
else return (int)ans;
}
}
};