007——字串轉整數(atoi)
阿新 • • 發佈:2018-12-16
// // Created by HINTS on 2018/11/29. // #include <iostream> #include <string> using namespace std; int myAtoi(string str){ int i = 0; int base = 0; while (isspace(str[i])){ i++; } int sign = 1; if(str[i]=='+' || str[i] =='-'){ sign = (str[i] == '-')?-1:1; i++; } while(isdigit(str[i])){ int digit = str[i] - '0'; //發生溢位 if(sign == -1){ if(-base < (INT_MIN + digit)/10) return INT_MIN; } else{ if (base > (INT_MAX - digit)/10) return INT_MAX; } base = base*10 + digit; i++; } return base*sign; } int main() { cout<<myAtoi("2147483648")<<endl; return 0; }
心得:
關鍵是控制溢位,INT_MAX和INT_MIN,網上有一些答案,但執行結果不對。最後試了這個,執行通過。