[String]字符串转换整数(atoi)
这道题目是一道常规的字符串题目,将一个整数转化为字符串,但是边界条件比较多,需要考虑全面
1、考虑空格位
2、考虑符号 +/-位
3、考虑前导0
4、考虑INT边界值
符号位必须紧挨着数字才是有效数字,无论+/-或者没有
#include <stdio.h>
#include <ctype.h>
#include <limits.h>
int myAtoi(char *str) {
// 过滤空格
while (*str == ' ') {
str++;
}
// 记录符号位
int sign = 1;
if (*str == '-') {
sign = -1;
++str;
} else if (*str == '+') {
sign = 1;
++str;
}
int ret = 0;
int div = INT_MAX / 10;
// INT_MAX = 2147483647
// INT_MIN = -2147483648
while (isdigit(*str)) {
int dig = *str - '0';
if (ret < div || (ret == div && dig < 8)) {
ret = ret * 10 + dig;
++str;
} else {
return ret = (sign == -1) ? INT_MIN : INT_MAX;
}
}
return sign * ret;
}
int main() {
char *str = "2147483642";
int ret = myAtoi(str);
printf("ret = %d\n", ret);
}