首页 > 代码库 > atoi 函数实现

atoi 函数实现

 
要考虑的东西实在也挺多的。总结如下:
 
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 函数实现