LeetCode第8题: string-to-integer-atoi(C语言)

上一题:LeetCode第7题: reverse-integer(C语言)

思路:考察遍历字符串,需要处理好正负号的问题,增加了一定的处理复杂度,整体不难

int myAtoi(char* str) {
    int length = strlen(str);
    long result = 0;
    bool minus = false;
    bool plus = true;
    int start = -1, end = -1;
    
    for(int i = 0; i < length; i++){
        char current = str[i];
        
        if(current == ' '){
            if(start != -1){
                break;
            }
            else if(minus == true || plus == false){
                    return 0;
            }
            else{
                continue;
            }
        } 
        else if(current == '-'){
            if(start == -1){
                if(plus == false){
                    return 0;
                }
                else if(minus == true){
                    return 0;
                }
                else{
                    minus = true;
                    continue;
                }
            }
            else{
                break;
            }
        }
        else if(current == '+'){
            if(start == -1){
                if(minus == true){
                    return 0;
                }
                else if(plus == false){
                    return 0;
                }
                else{
                    plus = false;
                    continue;                    
                }
            }
            else{
                break;
            }
        }

        if(current >= 48 && current <= 57){
            if(start == -1){
                start = i;
            }
            end = i;
        }
        else if(start == -1){
            return 0;
        }
        else{
            break;
        }
    }
    
    for(int i = start; start >= 0 && i < end + 1; i++){
        result += (int) str[i] - 48;
        if(i < end)
            result *= 10;
        if(result > INT_MAX)
            break;
    }
    
    if(minus){
        result = result * (-1);
    }
    
    if(result > INT_MAX){
        return INT_MAX;
    }
    else if(result < INT_MIN){
        return INT_MIN;
    }
    else{
        return result;
    }
    
}

本系列文章,旨在打造LeetCode题目解题方法,帮助和引导同学们开阔学习算法思路,由于个人能力和精力的局限性,也会参考其他网站的代码和思路,如有侵权,请联系本人删除。
下一题:LeetCode第9题: isPalindrome(C语言)

你可能感兴趣的:(LeetCode第8题: string-to-integer-atoi(C语言))