美丽的Solution
方案如下:
1、把字符串索引计数器 i 设在循坏外
2、遍历前部分是否有空格,有的话就忽略,直到不是空格,然后进入下一步
3、判断索引 i 位置是不是符号,如是则写入,然后i++,然后进入下一步
4、判断索引 i 位置是不是在0—9内,如是则写入,否则跳出
5、然后判断最后得到数字是否在Integer的范围内
int atoi(const char *str) {
int sign = 1, base = 0, i = 0;
while (str[i] == ' ') { i++; }
if (str[i] == '-' || str[i] == '+') {
sign = 1 - 2 * (str[i++] == '-');
}
while (str[i] >= '0' && str[i] <= '9') {
if (base > INT_MAX / 10 || (base == INT_MAX / 10 && str[i] - '0' > 7)) {
if (sign == 1) return INT_MAX;
else return INT_MIN;
}
base = 10 * base + (str[i++] - '0');
}
return base * sign;
}
他这里用的base = 10 * base + (str[i++] - '0');这种方式
其实我们也可以用字符串转化为整形,也没差?
让后可以用JAVA中try和catch来处理超出了整形范围的值。
网友评论