当前位置: 首页 > news >正文

atoi函数的模拟实现

这里强力推荐一篇文章 

 http://t.csdnimg.cn/kWuAm

详细解析了atoi函数以及其模拟实现,我这里就不说了。

这里作者先把自己模拟的代码给大家看一下。 

int add(char* arr)
{char* arr2 = arr;while (*arr!=-48){arr++;}arr--;int sum = 0;int n = 0;while (arr != (arr2-1)){sum += (*arr) * (int)pow(10, n);n++;arr--;}return sum;
}
void chage(char* arr)
{int n = 0;while (n < 100){arr[n] -= 48;n++;}}int my_atoi(const char * str1) 
{if (!isdigit(*str1) && *str1 != ' ')return 0;while(*str1 == ' '){str1++;if (!isdigit(*str1) && *str1 !=' ')return 0;if (isdigit(*str1)){int n = 0;char arr[100] = { 0 };while (isdigit(*str1)){arr[n] = *str1;str1++;n++;}chage(arr);return add(arr);}}if (isdigit(*str1)){int n = 0;char arr[100] = { 0 };while (isdigit(*str1)){arr[n] = *str1;str1++;n++;}chage(arr);return add(arr); }
}int main(){char a[] = "";char b[] = "     ";char c[] = "66666";char d[] = "    @. 66ab";char e[] = "    6666@qq.com";char f[] = "5020hehe";char g[] = "i love you 555";printf("%d\n", my_atoi(a)); // 0printf("%d\n", my_atoi(b)); // 0printf("%d\n", my_atoi(c)); // 66666printf("%d\n", my_atoi(d)); // 0printf("%d\n", my_atoi(e)); // 6666printf("%d\n", my_atoi(f)); // 5020printf("%d\n", my_atoi(g)); // 0return 0;}

 

这里我模拟的代码实现了这个效果,但是比较复杂。所以给大家看下简洁版的代码,也就是那篇文章作者的代码。 

#include <stdio.h>
#include <assert.h>// 数字ASCLL码值范围为 48—57int my_atoi(const char* str)
{assert(str);const char* tmp = str;while (*tmp == ' ')  // 跳过空格字符tmp++;int num = 0; // 转换数字字符值的接收变量// 如果是数字字符,就进来,到不连续处就停止while (*tmp <= 57 && *tmp >= 48)  {num = num * 10 + (*tmp - '0');if (*(tmp + 1) < 48 || *(tmp + 1) > 57){return num;}tmp++;}// 如果开始判断的字符不是数字字符,前面的循环不进去,这里直接返回0return 0;
}int main()
{char a[] = "";char b[] = "     ";char c[] = "66666";char d[] = "    @. 66ab";char e[] = "    6666@qq.com";char f[] = "520hehe";char g[] = "i love you 555";printf("%d\n", my_atoi(a)); // 0printf("%d\n", my_atoi(b)); // 0printf("%d\n", my_atoi(c)); // 66666printf("%d\n", my_atoi(d)); // 0printf("%d\n", my_atoi(e)); // 6666printf("%d\n", my_atoi(f)); // 520printf("%d\n", my_atoi(g)); // 0return 0;
}

 相比我的代码,这个作者的更加简便且简洁易懂,更推荐这个代码。(建议大家去认真看下那篇文章讲的真的挺好)

 库函数atoi实现的效果跟我们模拟的一模一样

 

所以这就是atoi函数的模拟实现,其函数解析在另一篇文章里,强力推荐这篇文章。 (我这就不说了)

http://t.csdnimg.cn/kWuAm

http://www.lryc.cn/news/272250.html

相关文章:

  • 编程笔记 html5cssjs 009 HTML链接
  • Vue实现导出Excel表格,提示“文件已损坏,无法打开”的解决方法
  • 分发糖果,Java经典算法编程实战。
  • 鸿蒙原生应用再添新丁!中国移动 入局鸿蒙
  • 一个人能不能快速搭建一套微服务环境
  • 计算机毕业设计------经贸车协小程序
  • 数据结构OJ实验11-拓扑排序与最短路径
  • 你的第一个JavaScript程序
  • CMake入门教程【基础篇】列表操作(list)
  • 普中STM32-PZ6806L开发板(HAL库函数实现-读取内部温度)
  • 普中STM32-PZ6806L开发板(使用过程中的问题收集)
  • 八股文打卡day12——计算机网络(12)
  • 自然语言处理2——轻松入门情感分析 - Python实战指南
  • pygame学习(一)——pygame库的导包、初始化、窗口的设置、打印文字
  • 前端面试
  • Spring Boot快速搭建一个简易商城项目【完成登录功能且优化】
  • KG+LLM(一)KnowGPT: Black-Box Knowledge Injection for Large Language Models
  • 使用anaconda创建爬虫spyder工程
  • 网络通信(7)-TCP协议解析
  • win32 WM_MENUSELECT消息学习
  • Java学习苦旅(十六)——List
  • python爬虫实现获取招聘信息
  • 模块电源(七):LDO 应用
  • Redis命令---Hash(哈希)篇 (超全)
  • Objects are not valid as a React child (found: object with keys {name}).
  • nodejs业务分层如何写后端接口
  • Windows 7 虚拟机的安装以及解决安装VMVMware tools问题
  • [足式机器人]Part2 Dr. CAN学习笔记-自动控制原理Ch1-9PID控制器
  • SSM养老院综合服务系统----计算机毕业设计
  • 广州求职招聘(找工作)去哪里找比较好