atoi函数
int atoi(char * str)
将字符串转为整形数,跳过前面的空格字符,直到遇上数字或者正负号才开始进行转换,而在遇到非数字或者字符’\0’结束转化,然后返回结果(int)。
当正溢出时返回INT_MAX,负溢出返回INT_MIN
题目思路比较简单,但是有挺多细节地方:
- 跳过前面的空格
使用stringstream >> string - 正负号处理
将第一个有效字符单独拿出来讨论,为+,为-,为数字,为其他。 - 溢出处理
int的范围是 [ − 2 31 , 2 31 − 1 ] [-2^{31}, 2^{31}-1] [−231,231−1]
负数最后一位数是8 正数是7 最大值为INT_MAX
res*10 + ch>=INT_MAX时有可能发生溢出
一般这种情况为了防止计算过程中溢出,将之转化为除法 res >= (INT_MAX-ch)/10 ,将这个>=进行展开,有两种情况
- res > (INT_MAX-ch)/10此时肯定溢出
- res == (INT_MAX-ch)/10 && ch>=&#