题目描述
把一个字符串变成整数
字符串由英文字母(大写和小写)、数字(0-9)、’ ‘、’+‘、’-’ 和 ‘.’ 组成。
规则:
- 去掉前导空格
- 判断正负:去掉空格之后的第一个字符。
- 遇到结尾或者非数字符返回
解题思路
- 先去掉前导空格
- 判断正负
- 去掉前导0
ret*10+x
注意超过整数范围时要进行截断:保留最大或者最小即可。
具体可看代码。
代码
class Solution {
public:
int myAtoi(string s) {
int ret=0;
int pos=0;
int flag=1;
//空格
while(pos<s.size()&&s[pos]==' ') pos++;
//正负
if(pos<s.size()&&s[pos]=='-') flag=-1,pos++;
else if(pos<s.size()&&s[pos]=='+') pos++;
//数字
while(pos<s.size()&&s[pos]>='0'&&s[pos]<='9')
{
//溢出
//满足条件:ret*10+(s[pos]-'0')<INT_MAX
if((INT_MAX-(s[pos]-'0'))/10<ret)
{
if(flag==-1) return INT_MIN;
else return INT_MAX;
}
ret=ret*10+(s[pos]-'0');
pos++;
}
return ret*flag;
}
};