LeetCode8——String to Integer (atoi)

Implement atoi to convert a string to an integer.

Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input cases.

Notes: It is intended for this problem to be specified vaguely (ie, no given input specs). You are responsible to gather all the input requirements up front.

题目大意

实现atoi 函数用于将string转换成integer。

难度系数: 容易

实现

这是我的实现,通过LeetCode测试。

int atoi(const char *str)
{
    if (strlen(str) == 0) {
        return 0;
    }
    int i = 0;
    int val = 0;
    bool sign = false;
    for (i = 0; str[i] != '\0'; ++i) {
        if (str[i] == ' ' || str[i] == '    ') {
            continue;
        }
        break;
    }
    if (strlen(str+i) == 0) {
        return 0;
    }    
    if (str[i] == '-') {
        sign = true;
        i++;
    }
    for (; str[i] != '\0'; ++i) {
        if (str[i] < '0' || str[i] > '9') {
            break;
        }
        if (sign) {
            if (val < INT_MIN / 10 || (val == INT_MIN / 10 && (str[i] -'0') >= INT_MIN % 10 * -1 ))
                return INT_MIN;
            val = val * 10 - (str[i] -'0');
        } else {
            if (val > INT_MAX / 10 || (val == INT_MAX / 10 && (str[i] -'0') >= INT_MAX % 10))
                return INT_MAX;
            val = val * 10 + str[i] - '0';    
        }

    }
    return val;
}

这代码虽然通过测试了。但是我别人的代码后,还是觉得有点问题。

  1. 要不要判断str为NULL时的情况,这个我觉得可以不用,很多C函数其实也是这样,你传个空指针是会崩溃的。 就这个函数而言,你传个空指针,几乎可断定,就是你的代码出问题了。这个函数接受空指针会Segmentation fault, 看似简单粗暴,实际就很恰当的做法,毕竟你期望的参数不是空指针,在该函数之前就已经出问题了,继续运行并不是个好办法。 如果你觉得需要考虑NULL的情况,那你可以加上判断。

  2. 判断空字符,是否是数字,这里我没有调用库函数isspace或isdigit来实现,这是我写的不好的地方。调用库函数,可以提高 移植性。

你可能感兴趣的:(LeetCode,C++,atoi)