算法:字符串转换整数(atoi)

leetcode 字符串转换整数(atoi)

算法:字符串转换整数(atoi)_第1张图片

主要提取字符串的的数字,但是它的要求比较多:

  1. 第一个数字前面只能出现多个空格、一个“+”或或一个“-”,否则就返回0
  2. 如果一串数字中间插入了其他符号,也舍弃后面,包括小数点
  3. int 范围问题

代码:

int myAtoi(char * s){
    long result = 0;
    int len = strlen(s);
    int status = 1;
    int start = -1;
    for (int i = 0; i < len; i++) {
        if (s[i] == '-') {
            if (s[i+1] < '0' || s[i + 1] > '9') return 0;
            status = -1;
            start = 1;
        }
        else if (s[i] == '+') {
            if (s[i+1] < '0' || s[i + 1] > '9') return 0;
            start = 1;
        }
        else if (s[i] >= '0' && s[i] <= '9') {
            result = result * 10 + (s[i] - 48);
            start = 1;
            if (s[i+1] < '0' || s[i + 1] > '9') break;
            if (result > 2147483648) break;
        }
        else if (s[i] != ' '&& start == -1) {
            return 0;
        }
    }
    if (result * status > 2147483647) {
        return 2147483647;
    } else if (result * status < -2147483648) {
        return -2147483648;
    }
    return result * status;
}

这里使用一个 long 来保存读取结果,就是为了便于处理超过 int 范围的问题。

用一个 start 来记录此字符是否有效,并且在读取一个数字之后判断下一个字符是否有效。

还有就是字符串的有效整数范围还可能超过 long 的范围,所以还是要判断是否超出范围,此处用 2147483648 来判断。

代码有点逻辑混乱

结果
算法:字符串转换整数(atoi)_第2张图片

你可能感兴趣的:(算法,算法,leetcode,c语言)