劍指offer(48):把字串轉換成整數
阿新 • • 發佈:2020-09-22
題目描述
將一個字串轉換成一個整數,要求不能使用字串轉換整數的庫函式。 數值為0或者字串不是一個合法的數值則返回0輸入描述:
輸入一個字串,包括數字字母符號,可以為空
輸出描述:
如果是合法的數值表達則返回該數字,否則返回0示例1
輸入
複製+2147483647 1a33
輸出
複製2147483647 0
解題關鍵點:對於字元型別的數字,該字元數字-'0'即為對應的整數型別對應的ASCII碼值
剛開始的程式碼:太過冗餘,且沒有考慮溢位的情況
class Solution { public: int StrToInt(string str) { int len = str.length();if(len == 0) return 0; int sum = 0; int number = 0; for(int i=1;i<len;i++){ if(str[i]<'0' || str[i]>'9')//注意這裡是str[i]<'0',而不是str[i]<"0",已經是一個字元了 return 0; else{ number = str[i] - '0'; sum += number*pow(10.0, len-i-1);//這裡可以優化為 sum * 10 + number } } if(str[0]=='+') return sum; else if(str[0]=='-') return -sum; else if(str[0]>='0' && str[0]<='9'){ number = str[0] - '0'; sum += number*pow(10.0, len-1); returnsum; } else return 0; } };
可能會出現異常的情況:
1.是否為空字串
2. 是否會溢位
3. 第一個字元是正負號還是數字