8. String to Integer (整数的溢出)

Implement atoi to convert a string to an integer.

If no valid conversion could be performed, a zero value is returned. If the correct value is out of the range of representable values, INT_MAX (2147483647) or INT_MIN (-2147483648) is returned.

int myAtoi(char* str) {
    long int ret = 0;
    char* p = str;
    bool isPos = true;
    
    //get the positive or negative
    while(*p == ' '){ //neglect space at the beginning
        p++;
        continue;
    }
    if(*p == '+') p++;
    else if(*p == '-'){
        isPos = false;
        p++;
    }
    
    //get the digit
    while(*p != '\0'){
        if(*p < '0' || *p > '9') break; //invalid character occurs, stop converting
        ret = ret*10 + (*p) - '0';
        if(ret >= 2147483648) break; //out of int range
        p++;
    }

    if(!isPos) ret = 0-ret;
    if(ret > INT_MAX) ret = INT_MAX;
    else if(ret < INT_MIN) ret = INT_MIN;
    return ret;
}

 

posted on 2016-04-07 18:15  joannae  阅读(201)  评论(0编辑  收藏  举报

导航