題目:劍指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也是出現了。測試