#include <bits/stdc++.h>
using namespace std;
#define mmax 2147483647
#define mmin (-2147483647-1)
int myAtoi(string s) {
int i = 0, sign = 1, tmp = 0; //没有符号字符时sign是正数
while(s[i] == ' ') ++i; //1.忽略前导空格
if(s[i] == '+' || s[i] == '-') //2.确定正负号
sign = (s[i++] == '-') ? -1 : 1; //s[i]为+的话sign依旧为1,为-的话sign为-1
while(s[i] >= '0' && s[i] <= '9') //3.检查输入是否合法
{
if(tmp > mmax / 10 || (tmp == mmax / 10 && s[i] - '0' > 7)) //4.是否溢出
return sign == 1 ? mmax : mmin;
tmp = tmp * 10 + (s[i++] - '0'); //5.不加括号有溢出风险
}
return tmp * sign;
}
int main()
{
string str = "+126416412";
cout<<myAtoi(str)<<endl;
return 0;
}