題目:
將一個字符串轉換成一個整數,要求不能使用字符串轉換整數的庫函數。 數值為0或者字符串不是一個合法的數值則返回0
輸入描述:
輸入一個字符串,包括數字字母符號,可以為空
輸出描述:
如果是合法的數值表達則返回該數字,否則返回0
分析:
注意輸入數據的合法性,例如“1234+12”,“12@@#*24”,這樣的都是不合法數值,要返回0的。但是如果第一個字符時+或-時是可以的,且影響最后輸出的符號,最后還要判斷下數字是否超出了范圍。
程序:
C++
class Solution { public: int StrToInt(string str) { if(str.size() == 0) return 0; long long num = 0; bool tag = true; if(str[0] == '-') tag = false; for(int i = (str[0] == '+' || str[0] == '-' ? 1 : 0); i < str.size(); ++i){ if(str[i] >= '0' && str[i] <= '9'){ num = num * 10 + (str[i] - '0'); } else{ num = 0; break; } } num = tag ? num : (-num); if(num > INT_MAX || num < INT_MIN) return 0; return (int)num; } };
Java
public class Solution { public int StrToInt(String str) { if(str == null || str.length() == 0) return 0; long num = 0; boolean tag = true; if(str.charAt(0) == '-') tag = false; for(int i = (str.charAt(0) == '+' || str.charAt(0) == '-' ? 1 : 0); i < str.length(); ++i){ if(str.charAt(i) >= '0' && str.charAt(i) <= '9'){ num = num * 10 + (str.charAt(i) - '0'); } else{ num = 0; break; } } num = tag ? num : (-num); if(num > Integer.MAX_VALUE || num < Integer.MIN_VALUE) return 0; return (int)num; } }
