思路
1、检查空格
2、检查符号
3、计算数字
- 判断是否溢出,如果溢出,根据符号进行返回
4、根据符号进行返回
代码
int res = 0;
int i = 0;
int flag = 1;//用来判断是正还是负,1表示正,0表示负
//1.检查空格
while (str[i] == ' ') i++;
//2.检查符号
if (str[i] == '-') flag = 0;
if (str[i] == '-' || str[i] == '+') i++;
//计算数字
while (i < str.size() && isdigit(str[i]))//如果i在size范围内1,且1为数字,则进行计算
{
int r = str[i] - '0';
//判断是否溢出
if (res > INT_MAX / 10 || (res == INT_MAX / 10 && r > 7))
//INT_MAX=2147483647
//INT_MIN=-2147483648
//如果res比214748364大,则res加入数字r后,一定越界
//如果res=214748364,但是r>7,则也发生越界,如果r==8&&flag==0,则返回INT_MIN,如果大于8,也是返回INT_MIN
{
return flag ? INT_MAX : INT_MIN;
}
res = res * 10 + r;//将数字r加在res后面
i++;
}
return flag ? res : -res;