【Java】 劍指offer(67) 把字符串轉換成整數

 

本文參考自《劍指offer》一書,代碼採用Java語言。html

更多:《劍指Offer》Java實現合集  java

題目

  請你寫一個函數StrToInt,實現把字符串轉換成整數這個功能。固然,不能使用atoi或者其餘相似的庫函數。ide

思路

  題目很簡單,主要就是實現對每一個字符轉化爲數字,並進行累加便可。可是有不少特殊狀況都須要考慮進去,例如null、空字符串、帶有正負號、字符不是數字、溢出等等。函數

  對於非法的特殊輸入,返回值爲0,還要用一個全局變量進行標記。post

  寫代碼時必定要考慮清楚各類測試用例。測試

 

 測試用例url

  1.功能測試(正、負、零、帶有正負號的數字)spa

  2.邊界值測試(最大正整數,最小負整數)code

  3.特殊測試(null,數空字符串,僅有正負號,非法字符)htm

Java代碼

  今天腦子有點亂,代碼總感受不是很簡潔,有點繁瑣,但功能是完善的。

  附註:字符串若是僅有正負號這裏認定爲非法輸入

//題目:請你寫一個函數StrToInt,實現把字符串轉換成整數這個功能。固然,不
//能使用atoi或者其餘相似的庫函數。

public class StringToInt {
    static boolean isValid = false;
    public static int strToInt(String str) {
        if(str == null || str.length()<=0)
            return 0;
        char[] chars = str.toCharArray();
        long num=0;  //先用long來存儲,以防止越界
        boolean minus=false;
        for(int i=0; i<chars.length; i++){
            if(i==0 && chars[i]=='-'){
                minus=true;
            }else if(i==0 && chars[i]=='+'){
                minus=false;
            }else{
                int a=(int) (chars[i]-'0');
                if(a<0 || a>9){
                    isValid=false;
                    return 0;
                }
                num= (minus==false) ? num*10+a : num*10-a;
                isValid=true;  //不放在最後面是爲了防止str=‘+’的狀況被判斷爲true
                if((!minus && num>0x7FFFFFFF)
                   ||(minus && num<0x80000000)){
                    isValid=false;
                    return 0;
                }
            }
        }
        return (int)num;
    }
    
    //簡單測試下
    public static void main(String[] args) {
		System.out.println(strToInt("1948243")==1948243);
		System.out.println(isValid==true);
		System.out.println(strToInt("+1948243")==1948243);
		System.out.println(isValid==true);
		System.out.println(strToInt("-1948243")==-1948243);
		System.out.println(isValid==true);
		System.out.println(strToInt("-0")==0);
		System.out.println(isValid==true);
		System.out.println(strToInt("-194+8243")==0);
		System.out.println(isValid==false);
		System.out.println(strToInt("")==0);
		System.out.println(isValid==false);
		System.out.println(strToInt(null)==0);
		System.out.println(isValid==false);
		System.out.println(strToInt("999999999999999")==0);
		System.out.println(isValid==false);
		System.out.println(strToInt("+")==0);
		System.out.println(isValid==false);
		
		System.out.println(strToInt("2147483647")==2147483647); //0x7FFFFFFF
		System.out.println(isValid==true);
		System.out.println(strToInt("2147483648")==0);
		System.out.println(isValid==false);
		
		System.out.println(strToInt("-2147483648")==-2147483648); //0x80000000
		System.out.println(isValid==true);
		System.out.println(strToInt("-2147483649")==0);
		System.out.println(isValid==false);
	}
}

  

true
true
true
true
true
true
true
true
true
true
true
true
true
true
true
true
true
true
true
true
true
true
true
true
true
true
StringToInt

 

收穫

  1.熟練掌握char類型轉化爲int類型操做

  2.邊界值測試,記住int類型最大正整數爲0x7FFFFFFF,最小負整數爲0x80000000

  3.注意到了負號,也要注意到正號。

 

更多:《劍指Offer》Java實現合集 

相關文章
相關標籤/搜索