码迷,mamicode.com
首页 > 其他好文 > 详细

atoi 函数实现

时间:2014-10-29 23:39:06      阅读:444      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   ar   sp   文件   数据   div   on   

 
要考虑的东西实在也挺多的。总结如下:
 
1 前面空格分隔符号的时候
 
2 第一个符号位处理+ -
 
3 遇到非数字字符退出
 
4 为正数的时候,大于INT_MAX上溢
 
5 为负数的时候, 小于INT_MIN下溢
 
6 为空字符串或者空指针的时候
 
 1  int atoi(const char *str)  
 2     { 
 3         if (str == nullptr) return 0; 
 4         //注意:判断空字符串数组 
 5         if(*str == \0) return 0; 
 6         long long llnum = 0; 
 7         int sign = 1; 
 8    
 9         while (*str ==  ) 
10         { 
11             str++; 
12         } 
13         if (*str == -) 
14         { 
15             sign = -1; 
16             str++; 
17         } 
18         //注意:不要溜了要判断+号的情况 
19         else if(*str == +) 
20         { 
21             str++; 
22         } 
23         while (*str >= ‘0‘ && *str <= ‘9‘) 
24         { 
25             int i = *str - 0; 
26             llnum = llnum*10 + i; 
27             if (llnum*sign > INT_MAX) 
28             { 
29                 llnum = INT_MAX; 
30                 break; 
31             } 
32             else if (llnum*sign < INT_MIN) 
33             { 
34                 llnum = INT_MIN; 
35                 break; 
36             } 
37             str++; 
38         } 
39         return int(sign*llnum); 
40     }  

 

头文件<limits.h>和INT_MAX和INT_MIN的含义用法。

一般情况下,C中int类型32位,范围是-2147483648到2147483647.

(1)最轻微的上溢是 INT_MAX + 1 :结果是 INT_MIN。
(2)最严重的上溢是 INT_MAX + INT_MAX :结果是 -2。
(3)最轻微的下溢是 INT_MIN - 1 :结果是 INT_MAX。
(4)最严重的下溢是 INT_MIN +INT_MIN :结果是 0。

应付溢出的最佳方法就是防范于未然:充分了解数据的范围,选择恰当的变量类型。

atoi 函数实现

标签:style   blog   color   ar   sp   文件   数据   div   on   

原文地址:http://www.cnblogs.com/yyxayz/p/4060822.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!