本文參考自《劍指offer》一書,代碼採用Java語言。html
更多:《劍指Offer》Java實現合集 java
請你寫一個函數StrToInt,實現把字符串轉換成整數這個功能。固然,不能使用atoi或者其餘相似的庫函數。ide
題目很簡單,主要就是實現對每一個字符轉化爲數字,並進行累加便可。可是有不少特殊狀況都須要考慮進去,例如null、空字符串、帶有正負號、字符不是數字、溢出等等。函數
對於非法的特殊輸入,返回值爲0,還要用一個全局變量進行標記。post
寫代碼時必定要考慮清楚各類測試用例。測試
測試用例url
1.功能測試(正、負、零、帶有正負號的數字)spa
2.邊界值測試(最大正整數,最小負整數)code
3.特殊測試(null,數空字符串,僅有正負號,非法字符)htm
今天腦子有點亂,代碼總感受不是很簡潔,有點繁瑣,但功能是完善的。
附註:字符串若是僅有正負號這裏認定爲非法輸入
//題目:請你寫一個函數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
1.熟練掌握char類型轉化爲int類型操做。
2.邊界值測試,記住int類型最大正整數爲0x7FFFFFFF,最小負整數爲0x80000000。
3.注意到了負號,也要注意到正號。