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.mzph.cn/news/593101.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何构建高效测试体系?掌握5大自动化测试模式就够了

软件开发过程中&#xff0c;高效的自动化测试体系是提升测试效率、保证产品质量关键&#xff0c;一个全面的测试体系涵盖多个维度&#xff0c;从功能性到用户界面&#xff0c;再到性能和安全性。 每个维度均采用不同的测试模式来满足特定的需求和解决特别的挑战&#xff0c;本…

快速打通 Vue 3(三):Vue3 中的 watch 监听器与新特性

很激动进入了 Vue 3 的学习&#xff0c;作为一个已经上线了三年多的框架&#xff0c;很多项目都开始使用 Vue 3 来编写了 这一组文章主要聚焦于 Vue 3 的新技术和新特性 如果想要学习基础的 Vue 语法可以看我专栏中的其他博客 Vue&#xff08;一&#xff09;&#xff1a;Vue 入…

风向再生变!智能汽车「竞合」博弈升级

新一轮科技革命影响下&#xff0c;全球汽车产业产品形态和格局被重塑&#xff0c;深度变革也随之而至。 高工智能汽车研究院监测数据显示&#xff0c;中国智能电动市场渗透率从2018年的0.32%&#xff08;占全部新能源车交付量&#xff09;快速提升至2022年的41.84%&#xff1b…

精选免费API接口汇总

笑话大全&#xff1a;各种最新、最及时的幽默、搞笑段子&#xff0c;不间断更新。历史上的今天&#xff1a;看看历史上的今天&#xff0c;都发生了什么重大事件。周公解梦 &#xff1a;周公解梦大全,周公解梦查询&#xff0c;免费周公解梦。标准体重计算器&#xff1a;身体质量…

为什么国产操作系统是基于linux研发的呢?

为什么国产操作系统是基于linux研发的呢&#xff1f; 在开始前我有一些资料&#xff0c;是我根据自己从业十年经验&#xff0c;熬夜搞了几个通宵&#xff0c;精心整理了一份「Linux的资料从专业入门到高级教程工具包」&#xff0c;点个关注&#xff0c;全部无偿共享给大家&…

2023年AIGC发展回顾与展望

2023年是人工智能内容生成&#xff08;AIGC&#xff09;技术飞速发展的一年。从年初ChatGPT一炮打响&#xff0c;大家纷纷加入到大模型研究之中。期间Midjourney和Stable Diffusion AI绘画技术持续火热&#xff0c;基于AIGC类的应用也如雨后春笋般遍地开花。万众瞩目的OpenAI G…

SpringCloud Feign-声明性Http请求以及Hystrix-Http请求的熔断配置

1、OpenFeign 1.1 概述 – Feign是一个声明性web服务客户机。它使编写web服务客户机变得更容易。 – 它的使用方法是定义一个服务接口并在上面添加注解。 – Feign支持可插拔编码器和解码器。 – Spring Cloud对Feign进行了封装&#xff0c;使其支持SpringMVC标准注解和Httpttp…

1.1 理解大数据(2)

小肥柴的Hadoop之旅 1.1 理解大数据&#xff08;2&#xff09; 目录1.1 理解大数据1.1.3 大数据概述1.1.4 更多思考 参考文献和资料 目录 1.1 理解大数据 1.1.3 大数据概述 step_0 大数据定义 【《大数据算法设计分析》】&#xff1a; 通常来讲大数据&#xff08;Big Data&am…

生态系统服务构建生态安全格局中的实践技术应用

生态安全是指生态系统的健康和完整情况。生态安全的内涵可以归纳为&#xff1a;一&#xff0c;保持生态系统活力和内外部组分、结构的稳定与持续性&#xff1b;二&#xff0c;维持生态系统生态功能的完整性&#xff1b;三&#xff0c;面临外来不利因素时&#xff0c;生态系统具…

解决jenkins的Exec command命令不生效,或者执行停不下来的问题

Jenkins构建完后将war包通过 Publish Over SSH 的插件发布到服务器上&#xff0c;在服务器上执行脚本时&#xff0c;脚本中的 nohup 命令无法执行&#xff0c;并不生效&#xff0c;我配置的Exec command命令是后台启动一个war包&#xff0c;并输出日志文件。 nohup java -jar /…

MySQL数据库连接超时和自动重连

1、当我们连接一个数据库的时候&#xff0c;当ip是错的&#xff0c;但是他还是很耗时间的&#xff0c;大概30s之后才会通知连接失败&#xff0c;该操作是十分费时的 所以可以使用 //&是你自己初始化的数据库名字 //&time3表示3秒连接不上&#xff0c;直接报错 int ti…

批量美化图片:让您的图片库焕然一新!

您是否曾经遇到过这样的问题&#xff1a;在处理大量图片时&#xff0c;一张一张地调整时间和精力成本太高&#xff1f;现在&#xff0c;我们为您带来了一款全新的批量图片美化工具&#xff0c;让您轻松解决这个问题&#xff01; 首先&#xff0c; 我们要进入首助编辑高手主页面…

(每日持续更新)jdk api之BufferedReader基础

&#xff08;每日持续更新&#xff09;jdk api之BufferedReader基础 1.8 BufferedReader BufferedReader 是 Java 中 Reader 的缓冲流实现&#xff0c;用于提高读取字符数据的性能。它提供了一些额外的属性和方法&#xff0c;以增强对字符流的操作。 以下是 BufferedReader …

/etc/profile文件一不小心改坏了,所有命令无法执行了怎么办?

转载说明&#xff1a;如果您喜欢这篇文章并打算转载它&#xff0c;请私信作者取得授权。感谢您喜爱本文&#xff0c;请文明转载&#xff0c;谢谢。 问题描述&#xff1a; 在部署jdk的时候&#xff0c;修改/etc/profile文件&#xff0c;文件改得有问题&#xff0c;但是当时没有…

【二】CocosCreator-CCGame.js源码分析

PS&#xff1a;只是看源码学习过程中把认为重要的内容以笔记的形式记录下来。 【1】config&#xff1a;当前游戏的一些配置 1.debugMode&#xff1a;用于控制输出日志的级别 2.showFPS&#xff1a;是否显示FPS 3.exposeClassName 4.frameRate&#xff1a;设置游戏帧率 5.id 6.…

redis单机部署

一、下载redis压缩包tar.gz 官网下载&#xff0c;现在一般用6.x以上版本 二、上传指定目录&#xff0c;解压缩 #假如上传到redis用户的家目录 cd /home/redis tar -zxvf redis-6.2.14.tar.gz 三、进入解压缩目录&#xff0c;进行编译 cd redis-6.2.14 make &&a…

SSH以及Dropbear介绍

SSH 1、什么是SSH (1)SSH仅仅是一种协议标准&#xff0c;目的是实现安全远程登录及安全网络服务。 2、实现SSH的工具有哪些 (1)开源OpenSSH&#xff0c;使用最广泛。 (2)Dropbear&#xff0c;轻量级SSH。 3、SSH可以实现的功能场景 (1)安全远程登录 (2)安全的端口转发 ①本地端…

【elfboard linux开发板】5.vmware tools安装及uart属性的获取和设置

1. 安装VMware tools 系统&#xff1a;ubuntu22.04 虚拟机版本&#xff1a;VMware workstation 16 pro&#xff08;16.1.2&#xff09; VMware tools文件&#xff08;iso)一般在虚拟机目录下&#xff0c;如果没有&#xff0c;这是下载网址&#xff0c;找到对应的虚拟机版本下载…

ARM笔记-----输入捕获

输入捕获可以对输入的信号的上升沿、下降沿或者双边沿进行捕获&#xff0c;常用的有测量输入信号的脉 宽&#xff0c;和测量 PWM 输入信号的频率和占空比这两种。 输入捕获的大概的原理 当捕获到信号的跳变沿的时候&#xff0c;把计数器 CNT 的值锁存到捕获寄 存器 CCR 中…

2023机器人行业总结,2024机器人崛起元年(具身智能)

2023总结&#xff1a; 1.Chatgpt引爆了通用人工智能&#xff0c;最大的受益者或是机器人&#xff0c;2023年最热门的创业赛道便是人形机器人&#xff0c;优必选更是成为人形机器人上市第一股&#xff0c; 可以说2023年是机器人开启智能化的元年&#xff0c;而2024则将成为机器…