【C语言】atoi函数的模拟
atoi对于初学者来说大概率是一个陌生的函数
但不要害怕,我们可以通过各种网站去查询
例如:
cplusplus就是一个很好的查询网站
目录
- 函数介绍
- 模拟实现
- 需要注意的点
函数介绍

我们发现这是一个将字符串转换为整形数字的函数
例如:
int main()
{char str[] = "1234";int ret = atoi(str);printf("%d\n", ret);return 0;
}

在遇到不同字符串会有不同处理方法:
-
该函数首先根据需要丢弃尽可能多的空白字符(如在isspace中),直到找到第一个非空白字符。
-
从这个字符开始,接受一个可选的初始加号或减号,后面跟着尽可能多的以10为基数的数字,并将它们解释为数值。
-
字符串可以在组成整数的字符之后包含其他字符,这些字符将被忽略,并且对此函数的行为没有影响。
-
如果str中的第一个非空白字符序列不是有效的整数,或者由于str为空或仅包含空白字符而不存在这样的序列,则不执行转换并返回零。
模拟实现
模拟实现时我们就可以根据不同的处理方法进行操作
注意:
因为当你输入一个
“a”时,输出为0
当输入一个“0”时,同样为一个0
故需要进行判断是否为一个合法的或是非法的
可以运行enum进行判断
#include<stdio.h>
#include<ctype.h>
#include<assert.h>
#include<stdlib.h>
//atoi模拟
enum Judge
{VALID,INVALID
}judge=INVALID;int my_atoi(char* str)
{assert(str);//判断指针是否为NULLint len = strlen(str);//判断是否为空字符串if (len == 0){return 0;}//将空格跳过while (isspace(*str)){str++;}//进行正负号的判断,注意如果原字符串可能不带符号,故初始化为1int flag = 1;if (*str == '+'){flag = 1;//判断完正负号要进行++跳到下一个字符str++;}else if(*str == '-'){flag = -1;str++;}long long ret = 0;//注意溢出while (*str){if (isdigit(*str)){ret = *str - '0' + ret * 10;//计算新的ret的值的式子if (ret > INT_MAX || ret < INT_MIN)//判断是否超出int的最大范围{if (flag == 1)return INT_MAX;elsereturn INT_MIN;}str++;}elsereturn flag * ret;}//运行到这时肯定是合法的judge = VALID;return flag * ret;
}
需要注意的点
-
我经常性的写数组时忘记带
[],导致程序出错 -
在进行判别正负号时为了省事没有进行
'-'判断,导致如果没有符号时程序出错
if (*str == '+'){flag = 1;str++;}else{flag = -1;str++;}
欢迎纠错与改正
相关文章:
【C语言】atoi函数的模拟
atoi对于初学者来说大概率是一个陌生的函数 但不要害怕,我们可以通过各种网站去查询 例如: cplusplus就是一个很好的查询网站 目录 函数介绍模拟实现需要注意的点 函数介绍 我们发现这是一个将字符串转换为整形数字的函数 例如: int main()…...
JAXB 使用记录 bean转xml xml转bean 数组 继承 CDATA(转义问题)
JAXB 使用记录 部分内容引自 https://blog.csdn.net/gengzhy/article/details/127564536 基础介绍 JAXBContext类:是应用的入口,用于管理XML/Java绑定信息 Marshaller接口:将Java对象序列化为XML数据 Unmarshaller接口:将XML数…...
Linux Centos安装Sql Server数据库,结合cpolar内网穿透实现公网访问
目录 前言 1. 安装sql server 2. 局域网测试连接 3. 安装cpolar内网穿透 4. 将sqlserver映射到公网 5. 公网远程连接 6.固定连接公网地址 7.使用固定公网地址连接 前言 简单几步实现在Linux centos环境下安装部署sql server数据库,并结合cpolar内网穿透工具…...
Vulnhub系列靶机---Raven: 2
文章目录 信息收集主机发现端口扫描目录扫描用户枚举 漏洞发现漏洞利用UDF脚本MySQL提权SUID提权 靶机文档:Raven: 2 下载地址:Download (Mirror) 信息收集 靶机MAC地址:00:0C:29:15:7F:17 主机发现 sudo nmap -sn 192.168.8.0/24sudo arp…...
计算机视觉与深度学习 | 视觉惯性SLAM的基础理论
===================================================== github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 ===================================================== 视觉惯性SLAM的基础理论 引言三维空间刚体的运动表示旋转矩阵(Rotatio…...
[电源选项]没有系统散热方式,没有被动散热选项
背景 笔记本的风扇声音太大,想改成被动散热方式,又不想影响性能。 于是我打开了控制面板\所有控制面板项\电源选项,点更改计划设置-> 更改高级电源设置。 想把散热方式改成被动散热。发现win11中好像没有这个选项了! 如何…...
房产中介租房小程序系统开发搭建
随着移动互联网的发展,租房小程序已经成为许多房产中介公司转型线上的重要工具。通过租房小程序,房产中介公司可以方便地展示房源信息、吸引租户、达成交易。那么,如何通过乔拓云网开发租房小程序呢?下面是详细的开发指南。 1.进入…...
RS485电路设计
引言 今天学习RS485电路的设计。 首先先来了解一下RS485电路是什么干什么。 RS485是一种串行通信协议,也是一种电气标准。它可以用于在远距离范围内传送数据,最长传输距离可以达到1200米,可以支持多个设备同时通信。RS485通常应用于工业自…...
分布式文件服务器——Windows环境MinIO的三种部署模式
上节简单聊到MinIO:分布式文件存储服务——初识MinIO-CSDN博客,但没具化,本节开始展开在Windows环境下 MinIO的三种部署模式:单机单节点、单机纠删码、集群模式。 部署的几种模式简要概括 所谓单机单节点模式:即MinI…...
科技资讯|9月新能源汽车零售74.3万辆,充电桩迎来发展高峰
据中国乘联会发布的初步数据,中国 9 月份乘用车市场零售 202.8 万辆,同比增长 6%,环比增 6%。今年以来,我国乘用车市场累计零售 1,524 万辆,同比增长 2%。 乘联会预计,9 月份新能源车市场零售 74.3 万辆&a…...
【C++ Primer Plus学习记录】指针——小结
目录 1.声明指针 2.给指针赋值 3.对指针解除引用 4.区分指针和指针所指向的值 5.数组名 6.指针算术 7.数组的动态联编和静态联编 8.数组表示法和指针表示法 1.声明指针 使用下面的格式声明指向特定类型的指针: typeName *pointerName; 2.给指针赋值 应将内…...
Android Studio for Platform (ASfP) 使用教程
文章目录 编写脚本下载源代码lunch 查看版本 归纳的很清楚,下载Repo并下载源码->可以参考我的 Framework入门のPiex 6P源码(下载/编译/刷机) 启动图标(重启生效) [Desktop Entry] EncodingUTF-8 NameAndroidStudio …...
【安全】linux audit审计使用入门
文章目录 1 audit简介2 auditctl的使用2 audit配置和规则3 工作原理4 audit接口调用4.1 获取和修改配置4.2 获取和修改规则4.3 获取审计日志 5 audit存在的问题5.1 内核版本5.2 审计日志过多造成的缓存队列和磁盘问题5.2 容器环境下同一个命令的日志存在差异 6 参考文档 1 audi…...
如何优雅的终止 Docker 容器
init 系统有以下几个特点: 它是系统的第一个进程,负责产生其他所有用户进程。 init 以守护进程方式存在,是所有其他进程的祖先。 它主要负责: 启动守护进程 回收孤儿进程 将操作系统信号转发给子进程 1. Docker 容器停止过程…...
SXSSFWorkbook-MinIo-大数据-流式导出
文章目录 前言业务现状架构思路技术细节生成摘要IDSXSSFWorkbookMinIomybatis 流查询PipedInputStream 保存到minio 总结 前言 由于业务涉及到数据比较大,用户对导出功能使用频繁,每次导出数据两10万以上。 为了减少数据库压力,及应用服务器…...
使用PyQt5创建图片查看器应用程序
使用PyQt5创建图片查看器应用程序 作者:安静到无声 个人主页 在本教程中,我们将使用PyQt5库创建一个简单的图片查看器应用程序。这个应用程序可以显示一系列图片,并允许用户通过按钮切换、跳转到不同的图片。 1. 准备工作 首先࿰…...
怎样制作一个展会场馆预约小程序
随着互联网的发展,展会行业也逐渐向数字化转型。展会场馆预约小程序作为展会线下向线上的延伸,能够让参展商和观众随时随地进行预约,大大提升了客户的体验。那么,如何制作一个展会场馆预约小程序呢?下面就以乔拓云平台…...
呼叫中心系统信息发送功能的应用
通常情况下功能比较齐全的呼叫中心系统都会有短信功能,那么短信功能在呼叫中心职场中有哪些应用呢? 呼叫中心系统中短信功能主要分为三部分:短信发送、待发送短信、短信发件箱,先来简单了解一下这三个功能在工作中如何使用。 短信…...
Android笔记(三)多Activity活动的切换中的简化处理
多Activity实现的跳转简单实现 Activity定义移动的界面。在本例中,介绍多个活动之间的切换的简化通用的实现。在本例中,定义三个活动MainActivity、FirstActivity和SecondActivity.要求能从MainActivity分别切换到FirstActivity和SecondActivity&#x…...
vue打包压缩
参考 https://www.cnblogs.com/lafitewu/p/8309305.html 注意:方法1和方法2不能同时用 取消打包的map config/index.js的productionSourceMap设置为false 抽取js 将部分常用又比较大的组件直接抽取为一个单独的js 打开webpack.base.conf.js,在module.exports.entry中添加想…...
潍坊漆面车衣怎么选才合适?
很多潍坊车主在给爱车选漆面保护膜时,都会有这样的困惑:网上信息真假难辨,线下门店推荐又参差不齐,到底该怎么选才合适?其实,选漆面车衣没有想象中那么复杂,关键是要掌握一套通用的判断标准。本…...
3步轻松延长JetBrains IDE评估期:开源工具让你的开发体验永不停歇
3步轻松延长JetBrains IDE评估期:开源工具让你的开发体验永不停歇 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter 还在为JetBrains IDE评估期结束而烦恼吗?作为开发者,我们经常…...
顶伯在线语音工具背后的技术力量:AI语音合成与深度学习解析
顶伯在线语音工具背后的技术力量在人工智能浪潮中,语音交互正成为人机沟通的核心方式。顶伯作为行业领先的在线语音工具,凭借自主研发的深度学习架构,将文字转化为高度自然的语音,广泛应用于有声阅读、智能客服、教育辅助等领域。…...
嵌入式软件定时器原理与实现:从硬件限制到多任务调度
1. 软件定时器:从硬件限制到软件自由的桥梁在嵌入式开发里,定时器是个绕不开的话题。无论是让LED灯定时闪烁,还是需要周期性地采集传感器数据,甚至是实现一个简单的按键消抖,都离不开定时功能。硬件定时器(…...
Linux网络数据包处理全流程:从系统调用到网卡驱动的深度解析
1. 项目概述:从代码到比特流的旅程如果你在Linux上写过网络程序,无论是用C的send()还是Python的socket.sendall(),你可能都曾好奇过:我调用完这个函数之后,数据到底经历了什么才变成网线上的电信号?反过来&…...
Mi-Create:零基础打造小米手表个性表盘的终极可视化神器
Mi-Create:零基础打造小米手表个性表盘的终极可视化神器 【免费下载链接】Mi-Create Unofficial watchface creator for Xiaomi wearables ~2021 and above 项目地址: https://gitcode.com/gh_mirrors/mi/Mi-Create 你是否厌倦了小米手表上那些千篇一律的官方…...
一文读懂现代城市照明:从亮化到数字化的行业升级指南
当前照明行业早已脱离单纯"亮起来"的初级阶段,正在向场景化、数字化、低碳化方向快速迭代,很多客户在选择照明服务商时往往对行业标准、技术趋势了解不足,导致项目效果与预期存在差距。行业升级的核心方向:从单一照明到…...
开启AI端侧能源新纪元 豪鹏科技亮相CIBF 2026
导读:豪鹏科技锚定“AI端侧电池固态电池”双轮驱动核心路径,完成从传统电池制造商到AI端侧能源引领者的跨越式转型,以硬核技术与前瞻布局,领航端侧能源产业迈向高质量发展新征程。以下为文章正文:图片来源于电池百人会…...
别只盯着TPS!用JMeter汇总报告做一次完整的性能瓶颈分析实战
别只盯着TPS!用JMeter汇总报告做一次完整的性能瓶颈分析实战 在性能测试领域,JMeter的汇总报告(Summary Report)是最常用的监听器之一,但很多测试工程师往往只关注其中的TPS(每秒事务数)指标&am…...
为ubuntu上的自动化脚本寻找稳定大模型api源taotoken的接入方案
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 为 Ubuntu 上的自动化脚本寻找稳定大模型 API 源:Taotoken 的接入方案 在 Ubuntu 环境中运行自动化脚本或智能体时&…...
