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

【C语言】atoi函数的模拟

atoi对于初学者来说大概率是一个陌生的函数
但不要害怕,我们可以通过各种网站去查询
例如:
cplusplus就是一个很好的查询网站

目录

  • 函数介绍
  • 模拟实现
    • 需要注意的点

函数介绍

在这里插入图片描述
我们发现这是一个将字符串转换为整形数字的函数

例如:

int main()
{char str[] = "1234";int ret = atoi(str);printf("%d\n", ret);return 0;
}

在这里插入图片描述
在遇到不同字符串会有不同处理方法:

  1. 该函数首先根据需要丢弃尽可能多的空白字符(如在isspace中),直到找到第一个非空白字符。

  2. 从这个字符开始,接受一个可选的初始加号或减号,后面跟着尽可能多的以10为基数的数字,并将它们解释为数值。

  3. 字符串可以在组成整数的字符之后包含其他字符,这些字符将被忽略,并且对此函数的行为没有影响。

  4. 如果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;
}

需要注意的点

  1. 我经常性的写数组时忘记带[],导致程序出错

  2. 在进行判别正负号时为了省事没有进行'-'判断,导致如果没有符号时程序出错

	if (*str == '+'){flag = 1;str++;}else{flag = -1;str++;}

欢迎纠错与改正

相关文章:

【C语言】atoi函数的模拟

atoi对于初学者来说大概率是一个陌生的函数 但不要害怕&#xff0c;我们可以通过各种网站去查询 例如&#xff1a; cplusplus就是一个很好的查询网站 目录 函数介绍模拟实现需要注意的点 函数介绍 我们发现这是一个将字符串转换为整形数字的函数 例如&#xff1a; int main()…...

JAXB 使用记录 bean转xml xml转bean 数组 继承 CDATA(转义问题)

JAXB 使用记录 部分内容引自 https://blog.csdn.net/gengzhy/article/details/127564536 基础介绍 JAXBContext类&#xff1a;是应用的入口&#xff0c;用于管理XML/Java绑定信息 Marshaller接口&#xff1a;将Java对象序列化为XML数据 Unmarshaller接口&#xff1a;将XML数…...

Linux Centos安装Sql Server数据库,结合cpolar内网穿透实现公网访问

目录 前言 1. 安装sql server 2. 局域网测试连接 3. 安装cpolar内网穿透 4. 将sqlserver映射到公网 5. 公网远程连接 6.固定连接公网地址 7.使用固定公网地址连接 前言 简单几步实现在Linux centos环境下安装部署sql server数据库&#xff0c;并结合cpolar内网穿透工具…...

Vulnhub系列靶机---Raven: 2

文章目录 信息收集主机发现端口扫描目录扫描用户枚举 漏洞发现漏洞利用UDF脚本MySQL提权SUID提权 靶机文档&#xff1a;Raven: 2 下载地址&#xff1a;Download (Mirror) 信息收集 靶机MAC地址&#xff1a;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…...

[电源选项]没有系统散热方式,没有被动散热选项

背景 笔记本的风扇声音太大&#xff0c;想改成被动散热方式&#xff0c;又不想影响性能。 于是我打开了控制面板\所有控制面板项\电源选项&#xff0c;点更改计划设置-> 更改高级电源设置。 想把散热方式改成被动散热。发现win11中好像没有这个选项了&#xff01; 如何…...

房产中介租房小程序系统开发搭建

随着移动互联网的发展&#xff0c;租房小程序已经成为许多房产中介公司转型线上的重要工具。通过租房小程序&#xff0c;房产中介公司可以方便地展示房源信息、吸引租户、达成交易。那么&#xff0c;如何通过乔拓云网开发租房小程序呢&#xff1f;下面是详细的开发指南。 1.进入…...

RS485电路设计

引言 今天学习RS485电路的设计。 首先先来了解一下RS485电路是什么干什么。 RS485是一种串行通信协议&#xff0c;也是一种电气标准。它可以用于在远距离范围内传送数据&#xff0c;最长传输距离可以达到1200米&#xff0c;可以支持多个设备同时通信。RS485通常应用于工业自…...

分布式文件服务器——Windows环境MinIO的三种部署模式

上节简单聊到MinIO&#xff1a;分布式文件存储服务——初识MinIO-CSDN博客&#xff0c;但没具化&#xff0c;本节开始展开在Windows环境下 MinIO的三种部署模式&#xff1a;单机单节点、单机纠删码、集群模式。 部署的几种模式简要概括 所谓单机单节点模式&#xff1a;即MinI…...

科技资讯|9月新能源汽车零售74.3万辆,充电桩迎来发展高峰

据中国乘联会发布的初步数据&#xff0c;中国 9 月份乘用车市场零售 202.8 万辆&#xff0c;同比增长 6%&#xff0c;环比增 6%。今年以来&#xff0c;我国乘用车市场累计零售 1,524 万辆&#xff0c;同比增长 2%。 乘联会预计&#xff0c;9 月份新能源车市场零售 74.3 万辆&a…...

【C++ Primer Plus学习记录】指针——小结

目录 1.声明指针 2.给指针赋值 3.对指针解除引用 4.区分指针和指针所指向的值 5.数组名 6.指针算术 7.数组的动态联编和静态联编 8.数组表示法和指针表示法 1.声明指针 使用下面的格式声明指向特定类型的指针&#xff1a; typeName *pointerName; 2.给指针赋值 应将内…...

Android Studio for Platform (ASfP) 使用教程

文章目录 编写脚本下载源代码lunch 查看版本 归纳的很清楚&#xff0c;下载Repo并下载源码->可以参考我的 Framework入门のPiex 6P源码(下载/编译/刷机) 启动图标&#xff08;重启生效&#xff09; [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 系统有以下几个特点&#xff1a; 它是系统的第一个进程&#xff0c;负责产生其他所有用户进程。 init 以守护进程方式存在&#xff0c;是所有其他进程的祖先。 它主要负责&#xff1a; 启动守护进程 回收孤儿进程 将操作系统信号转发给子进程 1. Docker 容器停止过程…...

SXSSFWorkbook-MinIo-大数据-流式导出

文章目录 前言业务现状架构思路技术细节生成摘要IDSXSSFWorkbookMinIomybatis 流查询PipedInputStream 保存到minio 总结 前言 由于业务涉及到数据比较大&#xff0c;用户对导出功能使用频繁&#xff0c;每次导出数据两10万以上。 为了减少数据库压力&#xff0c;及应用服务器…...

使用PyQt5创建图片查看器应用程序

使用PyQt5创建图片查看器应用程序 作者&#xff1a;安静到无声 个人主页 在本教程中&#xff0c;我们将使用PyQt5库创建一个简单的图片查看器应用程序。这个应用程序可以显示一系列图片&#xff0c;并允许用户通过按钮切换、跳转到不同的图片。 1. 准备工作 首先&#xff0…...

怎样制作一个展会场馆预约小程序

随着互联网的发展&#xff0c;展会行业也逐渐向数字化转型。展会场馆预约小程序作为展会线下向线上的延伸&#xff0c;能够让参展商和观众随时随地进行预约&#xff0c;大大提升了客户的体验。那么&#xff0c;如何制作一个展会场馆预约小程序呢&#xff1f;下面就以乔拓云平台…...

呼叫中心系统信息发送功能的应用

通常情况下功能比较齐全的呼叫中心系统都会有短信功能&#xff0c;那么短信功能在呼叫中心职场中有哪些应用呢&#xff1f; 呼叫中心系统中短信功能主要分为三部分&#xff1a;短信发送、待发送短信、短信发件箱&#xff0c;先来简单了解一下这三个功能在工作中如何使用。 短信…...

Android笔记(三)多Activity活动的切换中的简化处理

多Activity实现的跳转简单实现 Activity定义移动的界面。在本例中&#xff0c;介绍多个活动之间的切换的简化通用的实现。在本例中&#xff0c;定义三个活动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中添加想…...

Mysql5.7大限将至升级Mysql 8.0过程记录(未完)

一、前言 时间很快&#xff0c;到2023年10月底&#xff0c;MySQL 5.7就到了它的EOL&#xff08;End of Life&#xff09;&#xff0c;届时将不会提供任何补丁&#xff0c;无法应对潜在的安全风险&#xff1b;是时候和 MySQL 5.7 说再见了&#xff01;&#xff01;&#xff01;&…...

多架构环境下docker-compose部署rocketmq单机模式—— 筑梦之路

接上篇linux上构建任意版本的rocketmq多架构x86 arm镜像——筑梦之路-CSDN博客&#xff0c;本文适用于x86、arm等多架构环境。 话不多说&#xff0c;直接上代码。 准备broker配置文件 #broker配置文件示例 cat data/broker/conf/broker.conf brokerClusterName DefaultClus…...

[Unity][VR]Passthrough2-创建一个基本的Passthrough应用

上一期我们对PassthroughXR项目做好了基本的项目设置,今天我们就开始构建一个基本的Passthrough应用。 我们还是从基本场景开始。先把默认的main camera删除。因为后续我们会引入OVR Rig对象,这个对象自带Camera用来实现VR视角。 在Project面板我们搜索OVR camera rig。看见…...

【Unity3D赛车游戏制作】设置面板搭建——UGUI复合控件

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…...

如何让 Source Insight 识别 AUTOSAR 宏定义 FUNC

有很多从事汽车电子行业的软件工程师在使用Source Insight阅览Classic AUTOSAR协议栈源码的时候&#xff0c; 发现函数名无法解析&#xff0c;基本上都变成了FUNC。 先说原因&#xff1a; AUTOSAR的协议栈为了实现多平台和编译器兼容&#xff0c;大量使用宏定义来代替关键字。…...

sts搭建springboot

sts搭建springboot 需要的软件 Apache-maven-3.3.9.rar 链接&#xff1a;百度网盘 请输入提取码 提取码&#xff1a;1xgj Spring-tool-suite-4-4.20.0.RELEASE-e4.29.0-win32.win32.x86_64.self-extracting.jar 链接&#xff1a;百度网盘 请输入提取码 提取码&#xff1a;p…...

解决react使用css module无法重写bootstrap样式的问题

react使用css module虽然能够解决样式污染&#xff0c;但是同时也失去了写css样式的灵活性&#xff0c;特别是&#xff1a;在.module.css文件中当子元素是非变量的静态class类&#xff08;比如bootstrap&#xff09;, 此时使用css选择器对该子元素的样式不会起作用的 比如下面…...

自动驾驶软件和人工智能

自动驾驶汽车的核心在于其软件系统&#xff0c;而其中的机器学习和深度学习技术是使车辆能够感知、理解、决策和行动的关键。本文将深入探讨这些技术在自动驾驶中的应用&#xff0c;包括感知、定位、路径规划以及道路标志和交通信号的识别。 1. 机器学习和深度学习在自动驾驶中…...

堆叠、集群技术

1.堆叠、集群技术的概述 堆叠、集群简介 堆叠&#xff08;iStack&#xff09;&#xff0c;将多台支持堆叠特性的交换机通过堆叠线缆连接在一起&#xff0c;从逻辑上虚拟成一台交换设备&#xff0c;作为一个整体参与数据转发。 集群&#xff08;Cluster Switch System&#xf…...

SpringCould微服务保护01——Sentinel组件下载并使用

1.初识Sentinel 1.1.雪崩问题及解决方案 1.1.1.雪崩问题 微服务中&#xff0c;服务间调用关系错综复杂&#xff0c;一个微服务往往依赖于多个其它微服务。 如图&#xff0c;如果服务提供者I发生了故障&#xff0c;当前的应用的部分业务因为依赖于服务I&#xff0c;因此也会被…...