首页 > 代码库 > 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 函数实现
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。