文章目录

  • atoi函数:
  • 模拟实现:

atoi函数:

函数原型:

包含在在头文件<stdlib.h>中
该函数的的作用是把字符串中的数字字符转化为数字。
例如:

模拟实现:

首先我们要考虑以下几种情况:
1.传入的是空指针 my_atoi(NULL);
2.传入的是空字符 my_atoi("");
3.传入的数字前面有空字符 my_atoi(" 1234");
4.传入的数字加上了±号 my_atoi(" -1234");
5.传入的字符串中有非数字字符 my_atoi(" +1234abc");
6.传入的数字太大,溢出了 my_atoi(" 123423425436512344566");

当传入空字符时,我们返回0.但无法区分是传入空字符这样的异常情况返回的0还是传入字符0返回的数字0.所以我们首先用枚举,设置刚开始的状态为异常状态,最后写正常情况时,再让state值为VALID。

enum State
{VALID, //正常INVALID //非法
};
enum State state = INVALID;
int my_atoi(const char* str)
{//空指针assert(str);//str指向空字符if (*str == '\0')return 0;//跳过空白字符while (isspace(*str)){str++;}//识别正负数int flag = 1;if (*str == '+'){str++;}else if (*str == '-'){flag = -1;str++;}int ret = 0;while (*str){if (isdigit(*str)){ret = ret * 10 + flag * (*str - '0');str++;}else{state = VALID;return ret;//合法}}state = VALID;return ret;
}int main()
{char arr[] = "-1234";int ret = my_atoi(arr);printf("%d", ret);return 0;
}

这里使用了isspace函数和isdigit函数,分别判断传入的是否含有空格,以及是否是数字字符。如果是空格和数字字符,将会返回一个非零数值。

如何将字符数字转换为数字?
例如字符1的ascii码值为49,字符0的ascii码值为48.
‘1’-‘0’=1 ;即可得出数字1.
然后:ret = ret * 10 + flag * (*str - '0');
即可将一串数字字符转换为数字。

运行结果:

atoi函数的模拟实现相关推荐

  1. 详解 atoi 函数并模拟实现

    目录 一.函数说明 二.返回值 三.模拟实现 函数原型: int atoi(const char* str); 所属头文件:stdlib.h 一.函数说明 将字符串转换为整数(Convert stri ...

  2. C语言模拟实现:atoi函数

    在实现atoi之前我们先来了解一下atoi函数的作用是什么: 目录 1.实例演示 2.模拟实现 2.1 判断是否为空指针 2.2判断是否为空字符串 2.3判断正负号 2.4判断非数字字符 2.5判断是 ...

  3. atoi函数的介绍和模拟实现

    今天我来介绍atoi函数和模拟实现atoi函数. 目录 atoi和与其功能相似的函数的介绍 atoi函数的模拟实现 atoi和与其功能相似的函数的介绍 atoi函数是一个将字符串转换为整数值的函数. ...

  4. 【C语言】atoi函数的功能和模拟实现

    快速导航 1.atoi函数的功能 2.atoi函数的模拟实现 2.1初步模拟实现 2.2atoi函数的具体实现(考虑6种特殊情况) 1.atoi函数的功能  atoi函数功能是将数字字符串转换为整数: ...

  5. 【atoi函数的介绍以及模拟实现】

    目录 前言 一.atoi函数测试 1. 要求 2. 测试 二.atoi函数模拟实现 三.补充 前言 位置: atoi函数包含在<stdlib.h>头文件中 作用: 将字符串转换为整形数据返 ...

  6. 模拟实现atoi函数

    atoi函数原型为:int atoi( constchar *string ); 其功能是将一个数字字符串转换成int类型的整数,若数字前有空格,可以跳过空格. 模拟实现此函数,初看之下,觉得此题简单 ...

  7. atoi函数和itoa函数以及模拟使用

    1.atoi函数 atoi函数的作用是把一个字符串换成一个整型数据,该函数包含于头文件#include<stdlib.h>中.     1.空字符返回数字0:     2.数字字符前有空白 ...

  8. 【C语言】模拟实现atoi函数

    目录 前言 一.atoi()函数 二.模拟实现atoi 1.普通情况 2.空指针 3.前面有一大堆空格 4.字符串长度为0 5.整型溢出 6.含有其它类型数据 7.具体实现 前言 今天我们来模拟实现a ...

  9. atoi函数功能以及模拟实现

    目录 一,atoi函数的基本功能 1.1基本功能 1.2功能实现 二,模拟实现 2.1实现过程 2.2完整代码 一,atoi函数的基本功能 1.1基本功能 基本格式:int atoi(const ch ...

最新文章

  1. 互联网体系结构(网络基础).教案
  2. 编写微指令 计算机组成,计算机组成原理微指令实验报告
  3. mysql练习题——数据分析/大数据岗面试
  4. JavaScript 下载大文件解决方案(Blob+OjbectURL)
  5. python基础知识资料-python基础知识整理(值得收藏)
  6. 第21节 信息系统及其建设
  7. 解决在使用 Qt 编译项目时出现 “C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode格式以防止数据丢失“ 的警告
  8. 腾讯爬虫python_Python爬虫,爬取腾讯漫画实战
  9. USACO - 3.1.6 - Stamps
  10. oracle性能优化求生指南_Vue项目性能优化--实践指南,网上最全最详细
  11. 【react eslint】解决react-hooks/exhaustive-deps eslint报错问题
  12. 华为员工待遇全面揭秘
  13. notempty注解属于哪个依赖_@NotEmpty、@NotNull、@NotBlank注解解析
  14. MAC——本机域名[localhost]配置
  15. 2018,灵魂无处安放的一年
  16. 重庆公厕装免费WiFi 网速达50M
  17. EditText属性大全
  18. 【板栗糖GIS】为什么内网穿透过的地址出现Tunnel not found
  19. Jetson Nano非GUI界面自动登录设置(CLI命令行自动登录)
  20. 传奇Newoupui-pak配置失败怎么处理?

热门文章

  1. 阿里云ACP认证考试攻略及常见问题
  2. 华为hcip认证费用和报名资格
  3. 教育学原理笔记-整理
  4. 总线、通信接口、串行通信、并行通信详解
  5. 某软件平台定制开发项目技术标书
  6. 奔驰大灯服务器马达什么位置,【精】亲手维修奔驰电动马达【多图详拍】
  7. 贪心算法:数列极差问题
  8. CentOS8配置NTP服务器同步Windows和Linux主机
  9. 地理信息系统概论——知识点总结
  10. IBM P570热插拔添加稳压模块