[笔试面试][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 }

 

 

posted @ 2013-04-24 09:18  weiwei5987  阅读(189)  评论(0编辑  收藏  举报