[String]字符串转换整数(atoi)

发布时间 2023-10-05 00:31:44作者: __Helios

字符串转换整数(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);
}