我的题解表现:
class Solution { public: int myAtoi(string s) { int ret = 0; if (s.size() == 0){ return ret; } const char*p = s.c_str(); int i = 0; while(p[i] ==' ') i++; bool big0 = true; if ((p[i] != '+') && (p[i] != '-')){ if (!(p[i] >= '0') && (p[i] <= '9')){ return ret; } }else{ if (p[i] == '-'){ big0 = false; } i++; if (!(p[i] >= '0') && (p[i] <= '9')){ return ret; } } char a[11] = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; // 大于10位就不用看了 int j = 0; while((p[i] >= '0') && (p[i] <= '9')){ if (j == 11){ break; } if (p[i] > '0') { a[j] = p[i] - '0'; j++; }else{ if (j == 0){ }else{ a[j] = 0; j++; } } i++; } if (a[9] == -1){ // 9 位 一定没有越界 for(int k = 0;k<9;k++){ if (a[k]>=0){ ret = ret * 10 + a[k]; }else{ break; } } if (!big0){ ret = 0 - ret; } return ret; } if (a[10] == -1) { // 10位 可能越界了 if (big0){ int b[10] = {2,1,4,7,4,8,3,6,4,7}; for(int k=0;k<10;k++){ if (a[k] == b[k]){ }else if (a[k] > b[k]){ // 越界了 a[k]待验证数组 首先出现大的情况 return 2147483647; }else{ for(int l=0;l<10;l++){ ret = ret * 10 + a[l]; } return ret; } } return 2147483647; }else{ // 可能是 9 或者10 int b[10] = {2,1,4,7,4,8,3,6,4,8}; for(int k=0;k<10;k++){ if (a[k] == b[k]){ }else if (a[k] > b[k]){ // 越界了 return -2147483648; }else if (a[k] < b[k]){ for(int l=0;l<10;l++){ ret = ret * 10 + a[l]; } return 0 - ret; } } return -2147483648; } }else{ // 一定 越界了 if (big0){ return 2147483647; }else{ return -2147483648; } } } };