把字符串轉換成整數

將一個字符串轉換成一個整數,字符串不是一個合法的數值則返回 0,要求不能使用字符串轉換整數的庫函數。java

Iuput:
+2147483647
1a33

Output:
2147483647
0

這看起來是很簡單的題目,實現基本功能 ,大部分人都能用10行以內的代碼解決。但是,當咱們要把不少特殊狀況即測試用例都考慮進去,卻不是件容易的事。解決數值轉換問題自己並不難,但我但願在寫轉換數值的代碼以前,應聘者至少能把空指針,空字符串」「,正負號,溢出等方方面面的測試用例都考慮到,而且在寫代碼的時候對這些特殊的輸入都定義好合理的輸出。固然,這些輸出並不必定要和atoi徹底保持一致,但必需要有顯式的說明,和麪試官溝通好。面試

這個應聘者最大的問題就是尚未養成在寫代碼以前考慮全部可能的測試用例的習慣,邏輯不夠嚴謹,所以一開始的代碼只處理了最基本的數值轉換。後來我每次提醒他一處特殊的測試用例以後,他改一處代碼。儘管他已經作了兩次修改,但仍然有很多很明顯的漏洞,特殊輸入空字符串」「,邊界條件好比最大的正整數與最小的負整數等。因爲這道題思路自己不難,所以我但願他把問題考慮得很可能周到,代碼儘可能寫完整。函數

public int StrToInt(String str) {
    if (str == null || str.length() == 0)  //判空
        return 0;
    boolean isNegative = str.charAt(0) == '-';    //判斷是否是負數
    int ret = 0;
    for (int i = 0; i < str.length(); i++) {
        char c = str.charAt(i);
        if (i == 0 && (c == '+' || c == '-'))  /* 符號斷定 */
            continue;
        if (c < '0' || c > '9')                /* 非法輸入 */
            return 0;
        ret = ret * 10 + (c - '0');
    }
    return isNegative ? -ret : ret;
}
相關文章
相關標籤/搜索