思路:判断各种边界条件。
1)首先过滤字符串前面的空格,即找到第一个不为空格的字符;
2)如果第一个字符是+或-,设置flag值;
3)接下来的字符如果在‘0‘ - ‘9‘ 范围内,则转换为数字,否则结束循环; 注意上一步中,如果结果已经大于INT_MAX或小于INT_MIN,则直接返回INT_MAX或INT_MIN;
4)如果过滤掉空格后的字符不是一个有效的整数字符,则返回0;
5)整数之后可能有多余的其他字符,可以忽略不计。
class Solution { public: int myAtoi(string str) { int s = str.size(); if(s==0) return 0; int i=0, flag=1, cur; //用i遍历,flag存储正负号 long ans = 0; //计算数字的值,因为可能超出int边界,故定义为long while(i<s && str[i] == ‘ ‘) //过滤前面的空格 i++; if(str[i]==‘-‘ || str[i] == ‘+‘){ //处理 + 和 - if(str[i] == ‘-‘) flag = -1; i++; } while(i<s && str[i]>=‘0‘ && str[i]<=‘9‘){ cur = str[i] - ‘0‘; ans = ans*10 + cur; if(ans * flag < INT_MIN) return INT_MIN; if(ans * flag > INT_MAX) return INT_MAX; i++; } return ans*flag; } };
原文地址:https://www.cnblogs.com/Bella2017/p/11247458.html
时间: 2024-11-12 22:47:35