1. 程式人生 > 實用技巧 >劍指offer(48):把字串轉換成整數

劍指offer(48):把字串轉換成整數

題目描述

將一個字串轉換成一個整數,要求不能使用字串轉換整數的庫函式。 數值為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); return
sum; } else return 0; } };

可能會出現異常的情況:

1.是否為空字串

2. 是否會溢位

3. 第一個字元是正負號還是數字