劍指offer 67. 字符串轉換爲整數(Leetcode 8. String to Integer (atoi))

題目:劍指offer 67題git

須要考慮的狀況:空指針、nullptr、空字符串""、正負號、數值溢出。在寫代碼的時候對這些特殊的輸入都定義好合理的輸出。
能夠定義一個全局布爾型變量g_nStatus來判斷是不是錯誤輸入;能夠定義一個minus布爾型變量來存儲正負號的結果。面試

enum Status { kValid = 0, kInvalid };  // enum特性,默認kInvalid = 1
int g_nStatus = kValid;

long long StrToIntCore(const char* digit, bool minus) {
    long long num = 0;  // 64位整型
    while (*digit != '\0') {
        if (*digit >= '0' && *digit <= '9') {
            int flag = minus ? -1 : 1;
            num = num * 10 + flag * (*digit - '0');

            // 32位整數是否溢出,0x7FFFFFFF和0x80000000分別表明32位的最大正整數和最小負整數
            if ((!minus && num > 0x7FFFFFFF) || (minus && num < (signed int)0x80000000)) { 
                num = 0;
                break;
            }
            digit++;
        }
        else {
            num = 0;
            break;
        }
    }
    if (*digit == '\0') {
        g_nStatus = kValid;
    }
    return num;
}

int StrToInt(const char* str) {
    g_nStatus = kInvalid;
    long long num = 0;
    if (str != nullptr && *str != '\0') {
        bool minus = false;
        if (*str == '+')
            str++;
        else if (*str == '-') {
            str++;
            minus = true;
        }

        if (*str != '\0') {
            num = StrToIntCore(str, minus);
        }
    }
}

總結:編程

在劍指offer中,明確提出,在寫代碼前考慮全部可能的測試用例,是很是好的一個編程習慣。在思考問題的過程當中,把問題考慮得儘量周到,代碼儘可能完整。若是讓面試官指出你代碼中存在的問題,此時印象分已經大打折扣,即便你反應再快,在他們眼裏bug也是出現了。測試

相關文章
相關標籤/搜索