leetcode8——字串轉整數
阿新 • • 發佈:2018-12-09
分三種情況討論: 1. 判斷是否為空:輸入為空時,輸出0,並標記是因為非法輸入導致的 2. 錯誤輸入:如果字串的前部分字元為空,此時忽略前面為空的部分,即從有正常字元的位置開始計算,如輸入字串為“ 42”,則輸出為42; 3. 特殊輸入:第一個有效字元是否為‘+’或‘-’,則先判斷最後輸出的整數位正還是負數 4. 考慮溢位等情況,如INT_MIN, INT_MAX;
class Solution {
public:
int myAtoi(string str) {
const long long max = 0x100000000;
long long num = 0 ;
bool flag = false;//標記是否為負數
bool Invalid = false;//標記是否非法輸入
if(str.length() == 0){
Invalid = true;
return 0;
}
const char* digit = str.c_str();
while(*digit == ' '){//過濾點前面的空字元
digit ++;
}
if(*digit != '\0' && *digit == '+' ){//判斷第一個有效字元是否為‘+’
digit ++;
}else if(*digit != '\0' && *digit == '-'){//判斷第一個有效字元是否為‘-’
flag = true;//標記為true表示該整數位負數
digit ++;
}
while(*digit != '\0'){
if(*digit <= '9' && *digit >= '0'){
num = num * 10 + *digit - '0';
digit ++;
if(num > INT_MAX){
num = max;
}
}else{
break;
}
}
if(flag){
num = -num;
}
if(num > INT_MAX) num = INT_MAX;
if(num < INT_MIN) num = INT_MIN;
return num;
}
};