模拟实现atoi函数
来源:互联网 发布:淘宝引流最有效的方法 编辑:程序博客网 时间:2024/05/02 09:23
atoi (表示 ascii to integer)是把字符串转换成整型数的一个函数,应用在计算机程序和办公软件中。
注意:
atoi( ) 函数会扫描参数 nptr字符串,跳过前面的空白字符(例如空格,tab缩进等,可以通过isspace( )函数来检测),直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('\0')才结束转换,并将结果返回。如果 nptr不能转换成 int 或者 nptr为空字符串,那么将返回 0 。转换后的结果要考虑是否溢出。
#include<stdlib.h>#include<stdio.h>#include<assert.h>enum{valid = 1,invalid = 0};int flag = valid;int my_atoi(const char* str){assert(str);long long ret = 0;int symbol = 1;//用于判断符号//判断是否为空字符if (*str == '\0'){flag = invalid;return 0;}//去掉空格,制表符while (isspace(*str)){str++;}//判断符号if ((*str == '-')){symbol = -1;str++;if (((*str < '0') || (*str > '9'))){flag = invalid;return 0;}}else if (*str == '+'){str++;}else if (((*str < '0') || (*str > '9'))){flag = invalid;return 0;}//处理完异常,开始转换while ((*str != '\0') && (*str >= '0') && (*str <= '9')){ret = ret * 10 + *str - '0';str++;}//带上符号ret *= symbol;//检测结果是否溢出//int 0111 1111 1111 1111 1111 1111 1111 1111 正溢出// 7 f f f f f f f// 1000 0000 0000 0000 0000 0000 0000 0000 负溢出// 8 0 0 0 0 0 0 0if (((ret > 0x7fffffff) && (symbol == 1)) ||(ret < (signed int)0x80000000) && (symbol == -1)){flag = invalid;return 0;}//ret合法flag = valid;return ret;}//打印输出是否异常void PrintState(){if (flag)printf("正常\n");elseprintf("异常\n");}void Test(){printf("value=%d ", my_atoi("123456789"));//正常PrintState();printf("value=%d ", my_atoi("-123456789"));//正常PrintState();printf("value=%d ", my_atoi("-123456789abc"));//正常,遇到字母终止PrintState();printf("value=%d ", my_atoi(" -123456789abc"));//正常,前面带空格PrintState();printf("value=%d ", my_atoi("abc123456789"));//异常,前面有字母PrintState();printf("value=%d ", my_atoi("-abc123456789"));//异常,前面有字母PrintState();printf("value=%d ", my_atoi("+abc123456789"));//异常,前面有字母PrintState();printf("value=%d ", my_atoi("123.456789"));//正常 输出123PrintState();printf("value=%d ", my_atoi("+123.456789"));//正常 输出123PrintState();printf("\n\n\n");printf("value=%d ", my_atoi(""), flag);//异常:空字符串PrintState();printf("value=%d ", my_atoi("123456789123456789"));//异常:正溢出PrintState();printf("value=%d ", my_atoi("-123456789123456789"));//异常:负溢出PrintState();printf("value=%d ", my_atoi("abcd"));//异常:无法转换PrintState();}int main(){Test();system("pause");return 0;}
0 0
- 模拟实现atoi函数
- 模拟实现atoi函数
- 模拟实现atoi函数
- 模拟实现atoi函数
- 模拟实现atoi函数
- 模拟实现atoi函数
- 模拟实现atoi函数
- 模拟实现atoi函数
- 模拟实现atoi函数
- C语言模拟实现atoi函数
- C语言模拟实现atoi函数
- 模拟实现atoi和itoa函数
- 模拟实现库函数atoi
- atoi的模拟实现
- 模拟实现atoi
- 模拟实现atoi、itoa
- 【c语言】 模拟实现库函数的atoi函数
- 【面试题】剑指Offer-49-模拟实现atoi()函数
- 方格填数 蓝桥杯
- Bootstrap的优先级、选择器、伪类
- TCP协议学习笔记
- C++作业3
- 梯度下降算法
- 模拟实现atoi函数
- 键盘事件keydown、keypress、keyup
- VS2015 多线程同步 Event
- IP协议学习笔记
- 腾讯2017暑期实习生笔试题,计算字符串逆序数
- Struts2之路
- vue2.0动态组件及render
- Spark号称“内存计算框架” , 它将所有数据写 到内存吗?
- Ubuntu 环境变量失效解决