[笔试面试][code_by_hand]atoi
一定要手写代码,如果简单觉得题目大致思路知道就可以,到面试时真的会捉急,atoi平时觉得很简单,可是真正写起来要考虑的太多了:1.滤掉前面空格。2.判断字符串开始符号。3.防止溢出。 这些都是原有atoi的操作,最后4.返回bool表示有没有出错的情况,这不是atoi的,是我们自己扩展的功能。
1 bool my_atoi(const char *p, int &num) 2 { 3 if (p==NULL) 4 { 5 return false; 6 } 7 while(*p == ' ') 8 { 9 p++; 10 } 11 bool neg_flag = false; 12 long long res=0; 13 if (*p=='+' || *p=='-') 14 { 15 neg_flag = (*p++ != '+'); 16 } 17 while (*p>='0' && *p<='9') 18 { 19 res = res*10 + (*p++-'0'); 20 if (res > 0x7fffffff && !neg_flag) 21 { 22 num = 0x7fffffff; 23 return false; 24 }else if (res > 0x80000000 && neg_flag) 25 { 26 num = 0x80000000; 27 return false; 28 } 29 } 30 num = neg_flag? 0-res : res; 31 if ( *p!='\0' && (*p>'9' || *p <'0') ) 32 { 33 return false; 34 } 35 return true; 36 } 37 38 int main() 39 { 40 char arr[100]; 41 int result; 42 while (1) 43 { 44 scanf("%s", arr); 45 my_atoi(arr, result); 46 printf("%d %d\n", atoi(arr), result); 47 } 48 return 0; 49 }