[LeetCode] String to Integer (atoi)

来源:互联网 发布:冯大辉 知乎 编辑:程序博客网 时间:2024/05/29 18:20

题目

https://leetcode.com/problems/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.

代码

1047 / 1047 test cases passed.Runtime: 15 ms
#define rint register intsigned int MAX = 0x7fffffff;signed int MAX_MINUS = 0x80000000;int myAtoi(char* str) {    if (str == NULL) {        return 0;    }    rint offset = 0;    while (str[offset] == ' ' || str[offset] == '\t') {        offset++;    }    int minus = 0;    if (str[offset] == '+') {        offset++;    } else if (str[offset] == '-') {        offset++;        minus = 1;    }    long val = 0; // 可能超出int,所以用long    for (rint i = offset; str[i] != '\0'; i++) {        if (str[i] >= '0' && str[i] <= '9') {            val = val * 10 + str[i] - '0';            if (val > MAX) {//及时退出                break;            }        } else {            break;        }    }    if (minus) {        val = val *(-1);    }    //printf("%ld\n", val);    if (val > MAX) {        val = MAX;    }    if (val < MAX_MINUS) {        val = MAX_MINUS;    }    return val;}

附:一些输入值

输入 输出 ” +004500” 4500 ” 010” 10 “+1” 1 “-1” -1 “12sss” 12 “aaa” 0 “2147483648” 2147483647 “-2147483649” -2147483648 “9223372036854775809” 2147483647