atoi()函数实现
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了atoi()函数实现相关的知识,希望对你有一定的参考价值。
实现atoi()函数开始之前,测试了库中的atoi()函数,发现库中提供的atoi函数可以处理许多异常,下面就是库中可以处理的异常:
1.指针为NULL
2.空字符串
3.(+,-)号处理
4.遇到异常字符时的处理方式
5.溢出时处理,分为两部分:
1).上溢出,输出上界
2).下溢出,输出下界
那么对这些异常进行处理就可以完成一个简单atoi()函数了。
代码实现:
/*My_Atoi.c*/ #include <stdio.h> #include <stdlib.h> #include <assert.h> #include <limits.h> typedef enum Ret { VALID, INVALID }Ret; Ret state = INVALID; //用来判断异常的全局变量 int My_Atoi(const char* str) { int flag = 1; //正负 long long ret = 0; //返回值 assert(str); if(str == NULL) //空指针 { return (int)ret; } if(str == ‘\0‘) //空字符串 { return (int)ret; } while(*str == ‘ ‘) //空白字符 { str++; } if(str == ‘\0‘) //空白字符串 { return (int)ret; } else if(*str == ‘+‘ || *str == ‘-‘) { if(*str == ‘-‘) { flag = -1; } str++; } while(*str) { if((*str <= ‘9‘) && (*str >= ‘0‘)) { state = VALID; ret = ret * 10 + flag * (*str - ‘0‘); str++; if(ret > INT_MAX) //上溢出 { state = INVALID; printf("上溢出,"); return (int)INT_MAX; } if(ret < INT_MIN) //下溢出 { state = INVALID; printf("下溢出,"); return (int)INT_MIN; } } else //异常字符 { return (int)ret; } } return (int)ret; } int main() { int ret = My_Atoi(""); //int ret = My_Atoi("1213"); //int ret = My_Atoi("-1213"); //int ret = My_Atoi("123aaa"); //int ret = My_Atoi("-111111111111111"); //int ret = My_Atoi("111111111111111"); if(state == INVALID) { printf("输入非法!!\n"); } printf("ret = %d\n", ret); system("pause"); return 0; }
部分测试结果:
/*My_Atoi("")*/
/*My_Atoi("-1213")*/
/*My_Atoi("111111111111111")*/
/*My_Atoi("123aaa")*/
在以后写一个库中已有的函数,先使用它,并测试它可以完成的事情,以及可以处理的异常,只要考虑到那些异常处理,那么这些函数就可以很轻松搞定。
本文出自 “Pzd流川枫” 博客,请务必保留此出处http://xujiafan.blog.51cto.com/10778767/1757626
以上是关于atoi()函数实现的主要内容,如果未能解决你的问题,请参考以下文章
8. 字符串转整数(实现atoi函数) [leetcode 8: String to Integer (atoi)]