模拟atoi函数,从字符串到数字的转化
来源:互联网 发布:淘宝男装店铺简介范文 编辑:程序博客网 时间:2024/06/05 19:20
atoi函数是将字符串转化为数字,这个函数可以面对任何错误的情况,是个强大的函数。今天我们就来模拟下它。
(1)考虑指针为空的情况
assert(str != NULL);
(2)考虑字符串为空的状况
if (*str == '\0')
{
return state;
}
state 是定义的一个全局变量,用来判断是否合法,首先赋值为不合法。
(3)考虑字符串前面是空白字符的情况,可以用isspace函数判断,(充分利用库函数)。
while (str&&isspace(*str))
{
str++;
}
(4)考虑是负数的情况
if (*str == '-')
{
flag = -flag;
str++;
}
flag的初始化为1,而-flag则为-1,相当于正负系数。
(5)考虑字符串前面是数字后面是其他字符的情况
else//非法字符
{
state = LEGAL;
return (int)ret;
}
这时截断后面的其他字符,返回计算的整型值。
(6)最后就是正常的情况了,数字字符
while (*str)
{
if (isdigit(*str))
{
ret = ret * 10 +( (*str) - '0')*flag;
if ((ret > INT_MAX) || (ret < INT_MIN))
{
return state;
}
}
else//非法字符
{
state = LEGAL;
return (int)ret;
}
该考虑的情况已经考虑完成,接下来就是整体的代码了
#include <ctype.h>#include <limits.h>#if 1enum LEGAL{LEGAL,ILLEGAL};enum LEGAL state = ILLEGAL;int my_atoi(char *str){int flag = 1;long long ret = 0;//指针为空assert(str != NULL);//空字符串if (*str == '\0'){return state;}//空白字符while (str&&isspace(*str)){str++;}//负数if (*str == '-'){flag = -flag;str++;}//数字while (*str){if (isdigit(*str)){ret = ret * 10 +( (*str) - '0')*flag;if ((ret > INT_MAX) || (ret < INT_MIN)){return state;}}else//非法字符{state = LEGAL;return (int)ret;}str++;}state = LEGAL;return (int) ret;}int main(){char str[] = "-12222222";int ret = my_atoi(str);if (state == LEGAL)printf("%d", ret);elseprintf("不合法!");getchar();return 0;}
好了,今天的代码完成了,加油!
阅读全文
1 0
- 模拟atoi函数,从字符串到数字的转化
- 数字字符串与数字相互转化-atoi函数和itoa函数的实现
- 【笔试】55、实现吧字符串转化为数字(C的atoi函数)
- 大的字符串的中数据转化为数字,字符数值的提取转化,atoi();
- _tcstol 字符串到数字的转化
- _tcstol 字符串到数字的转化
- 从1打印到最大的n位数字(字符串模拟数字自加)
- HDU 5059 Help him(字符串 筛选数字 模拟)(atoi sprintf 函数)
- C语言实现atoi和itoa(字符串与数字之间的转化)
- 字符串转化为数字函数
- 数字转化为字符串函数
- 字符串转化为数字函数
- 数字转化为字符串函数
- 函数:字符串转化为数字
- 数字字符串转换成算数类型函数atoi(),分解字符串的函数strtok()的简单应用
- 字符串转化atoi、atof
- javascript字符串数字转化函数parseInt的奇怪现象
- 用汇编实现数字转化为字符串的函数itoa
- 浅析 Linux 初始化 init 系统,第 2 部分: UpStart
- 2017Java基础面试题(一)
- amd64下的几种地址形式
- 字符常量
- 浅析 Linux 初始化 init 系统,第 3 部分: Systemd
- 模拟atoi函数,从字符串到数字的转化
- 发现一个有意思的奇葩极客网站
- activiti特点
- Touch.js
- Android动态调试so之dump内存数据
- 进程间通讯——内存映射/文件映射形式
- Excel 技巧百例:数据透视表的排序
- 20170726Python01_Python简介和输入输出
- 1701-MySQL-JDBC-连接池使用