个人技术分享

题目描述

把一个字符串变成整数

字符串由英文字母(大写和小写)、数字(0-9)、’ ‘、’+‘、’-’ 和 ‘.’ 组成。

规则:

  • 去掉前导空格
  • 判断正负:去掉空格之后的第一个字符。
  • 遇到结尾或者非数字符返回

解题思路

  1. 先去掉前导空格
  2. 判断正负
  3. 去掉前导0
  4. 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;

    }
};