【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.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案
JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停 1. 安全点(Safepoint)阻塞 现象:JVM暂停但无GC日志,日志显示No GCs detected。原因:JVM等待所有线程进入安全点(如…...
