atoi函数的介绍和模拟实现

Transformers 中的 Softmax 可以并行加速么? 通过融合前两个计算步骤,降低执行Reduce_max和Reduce_sum等操作的通信开销。利用共享内存来存储临时数据,以减少对全局内存的访问成本。 阅读详情

今天我来介绍atoi函数和模拟实现atoi函数。





atoi和与其功能相似的函数的介绍

atoi函数是一个将字符串转换为整数值的函数。
请添加图片描述
由msdn查询可以得知,atoi函数的返回类型是int类型,参数类型是const char *,传参要转换的字符串。

在msdn中,我们还可以发现与atoi函数作用相同的函数,如下:
请添加图片描述

这三个函数分别是atof函数、_atoi64函数、atol函数

那么这四个函数有什么区别呢?我们继续在msdn往下查询。

atof函数将字符串转换为双精度浮点值
atoi函数将字符串转为整形值
_atoi64函数将字符串转为long long类型的值
atol将字符串转为long类型的值

返回值介绍

atof函数返回double类型的值,atoi函数返回int类型的值,_atoi64返回long long类型的值,atol函数返回long类型的值,如果输入无法转换为该类型的值,则返回值为0(对于atoi和_atoi64)、0(对于atol)或0.0(对于atof)。溢出时返回值未定义。



atoi函数的模拟实现

应当应对的情况:
1.my_atoi(NULL) 传空指针
2.my_atoi(“”) 传空内容
3.my_atoi(" 123") 传空格+123
4.my_atoi(“-123”) 传正常整数
5.my_atoi(“123abc”) 传整数+字母
6my_atoi(“111111111111111111111”) 传较大的数字,超过了整形的取值范围

#include<stdio.h>
#include<limits.h>
#include<ctype.h>
enum status
{
	VALID,
	INVALID
};
enum status Status = INVALID; 
int my_atoi(const char* ps)
{
	long long ret = 0;
	int flag = 1;
	if(ps == NULL)  //应对空指针
	{
		return 0;
	}
	if(*ps == '\0')  //应对空内容
	{
		return 0;
	}
	while(isspace(*ps))   //应对空格
	{
		ps++;
	}
	if(*ps == '-')     //负数
	{
		flag = -1;
		ps++;
	}
	else if(*ps == '+')    //正数
	{
		flag = 1;
		ps++;
	}
	while(isdigit(*ps))
	{
		ret = ret * 10 + flag * (*ps - '0');
		if(ret < INT_MIN || ret > INT_MAX)   //应对数字过大,超过整形的取值范围
		{
			return 0;
		}
		ps++;
	}
	if(*ps == '\0') 
	{
		Status = VALID;
		return (int)ret;
	}
	else
	{
		return (int)ret;
	}
}	
int main()
{
	int ret = my_atoi("-123");
	if(Status == VALID)
		printf("合法的转换:%d\n",ret);
	else if(Status == INVALID)
		printf("非法的转换:%d\n",ret);
	return 0;
}

今天的讲解就到这里,关注点一点,下期更精彩。

ISO26262 功能安全各个阶段测试要求 1. 开发过程说明 系统层面:包括软硬件集成测试、系统集成测试以及整车测试。 硬件层面:包括硬件集成与测试。 软件层面:单元测试、集成测试。 2. 功能安全总体要求 2.1 各项指标 2.2 诊断覆盖度举例 针对一个信号举例说明: 3. 功能安全测试要求 3.1 测试计划 核心内容应包括, 测试对象:需要测试的对象描述,以及测试的范围描... 阅读详情

相关推荐

Uni-App推送踩坑实录:从云函数URL化到后台推送失效,我都经历了什么

本文详细记录了Uni-App开发者在接入uni-push 2.0时遇到的推送失效问题,从云函数URL化到后台推送失效的完整排查过程。通过系统化分析和与官方沟通,最终找到解决方案,并分享了预防措施与最佳实践,帮助开发者避免类似问题。

weixin_42552716的博客 486

CAPL编程实战:深入解析Itoa与_atoi64的数据转换边界与陷阱

本文深入探讨了CAPL编程中Itoa与_atoi64函数在数据转换时的边界条件与常见陷阱。通过实际案例分析,详细阐述了Itoa函数在类型隐式转换、目标数组长度不足及非法进制参数下的风险,以及_atoi64函数对输入字符串的严格要求和返回值0的歧义问题,并提供了安全的编程实践与防御性编码策略,帮助工程师编写更健壮的汽车网络测试脚本。

weixin_29168393的博客 185

海康工业相机SDK+OpenCV实战:图像采集与Mat格式转换优化指南

本文深入探讨了如何高效利用海康工业相机SDK与OpenCV进行图像采集与处理。重点解析了从相机RawData到OpenCV Mat格式转换的核心优化技巧,包括像素格式匹配、内存零拷贝管理以及彩色图像BGR/RGB转换,旨在解决工业应用中常见的性能瓶颈与内存问题,构建稳定高效的图像处理流程。

weixin_29192211的博客 108

Linux __int64 与 _atoi64()的替换函数

一、__int64 Windows下有__int64【注意,int64前是两个下划线】,但是在Linux下不存在__int64,为了方便使用,可以自定义__int64的宏 #define __int64 long long ,__int64对应 long long 二、_atoi64() Windows下有_atoi64()函数,但是在Linux下不存在_atoi64()函数,为了方便使...

qq_27278957的博客 7214

基于远程服务器 Tip_Adapter源码从零开始复现

从零一步步实现源代码的运行

zcyzcyjava的博客 1602

如何根据芯片手册时序图编写驱动程序

如何根据芯片手册时序图编写驱动程序 对于电子开发者来说,刚刚拿到一个芯片,常用的芯片可以参考网上的例程来做深入了解,对于一个不常用的芯片来说,Datasheet几乎是使用芯片的唯一的资料,所以根据Datasheet时序图写出对应的驱动程序就尤为重要。 本文根据一个简单的例子来阐述根据时序图来编写对应的程序过程。旨在讲解对于初学者应该怎么利用芯片的时序图编写符合要求的底层驱动程序(老鸟请跳过)。 下载芯片的Datasheet,(个人常用http://www.21icsearch.com/)如..

weixin_36447711的博客 1万+

matlab 三维绘图 抛光,瓷砖抛光过程建模与仿真

:瓷砖抛 光过程 建模与仿真朱 成 就(广 东工业大学 机 电工程 学院, 广东广州 )摘要 :瓷砖的抛磨影响 因素众 多 ,实际磨削加工时容易出现漏抛 、返抛现象 。对陶瓷抛光机磨头进行运动学分析 ,并基于不 同粒度号 的磨 粒在一定压力下的加工深度模型 ,探讨抛光机磨 头转 速 、横梁摆动频率 、传送速度对瓷砖抛光加工表 面均匀性 的影响,然 后结合 磨削机理使 用 对陶瓷抛光过程进行仿真 ...

weixin_36331058的博客 747

CAPL_学习笔记(Itoa/_atoi64)

变量不一定只能是long类型,因为隐式转换机制(即,实参传递形参时,数据类型优先转换为形参类型),使用byte,word,dword,int arr[2](数组中的具体元素),甚至可以是ASCIL编码的字符变量或字符常量均可。3:最后是转换进制的形参,可以是变量可以是常数,(但是不管是常量还是变量),该参数只支持2进制,8进制,10进制,16进制,其他参数运行时会报错。第一行中 1 标注处 可以知道该函数,是没有返回值的,包含了三个参数,看6处,详细标注了,每个参数的含义。,先看描述,提取出几个关键词,

WE_BIG的博客 1334

基于docker进行安装部署seata,解决Seata的版本与Nacos的版本不匹配

本文分享了在Docker环境下部署Seata时遇到Nacos 3.x API不兼容问题的解决方案。由于Seata 2.0.0内置的nacos-client 1.4.2无法调用Nacos 3.x重构后的接口,导致注册失败。通过下载Seata 2.6.0源码自行构建Docker镜像,并调整启动方式(直接执行Java命令绕过Shell脚本),最终成功实现与Nacos 3.x的集成。关键步骤包括:创建自定义Dockerfile、配置application.yml、处理启动脚本兼容性问题,最终采用java直接运行方案

Dd52698的博客 406

AM芯片性能测试

目前车载FM&AM没有明确的国标,因此各家测试项目可能不同,最主要测试标准比较混乱,多是根据具体芯片的规格书以及与芯片厂商协商。信号发生器:R&S SMCV100B音频分析仪:R&S UPV AUDIO AYALYZER DC 250KHZ(AP的也可以)专用USB-I2C控制模块(不同芯片控制模块不同,例如SPI或UART的控制模块)卡农线(针对模拟声道输出,+接左/右声道,-接GND,地可接GND也可悬空)

qflook的博客 902

atoi函数的模拟实现

文章目录atoi函数:模拟实现: atoi函数: 函数原型: 包含在在头文件<stdlib.h>中 该函数的的作用是把字符串中的数字字符转化为数字。 例如: 模拟实现: 首先我们要考虑以下几种情况: 1.传入的是空指针 my_atoi(NULL); 2.传入的是空字符 my_atoi(""); 3.传入的数字前面有空字符 my_atoi(" 1234"); 4.传入的数字加上了±号 my_atoi(" -1234"); 5.传入的字符串中有非数字字符 my_atoi(" +1234abc")

mmz123_的博客 535

基于CANopen协议,实现机器人500-1000Hz高频控制(附实操实例) (1)

基于CANopen协议实现机器人500-1000Hz高频控制,核心不是“协议本身的性能极限”,而是“通过优化配置、硬件适配、软件调优,最大化发挥协议的实时性优势”。关键在于:以PDO为核心实现实时数据传输,以SYNC帧锁定高频同步周期,以精简冗余、优化硬件降低总线负载,同时通过实操调试解决周期漂移、延迟、干扰等问题。

start_up_go的博客 93

【C语言】atoi函数的功能和模拟实现

4.非数字字符,例如"123a456",这里在指针走到a的时候,直接返回123就行了,不需要继续往下走了,此时是一种。,但是有一个问题,返回的0时原字符是'0还是空字符串,这里存在非法转换和合法转换,可以。5.溢出问题是数字字符的一种情况,当所得的n的值大于最大整型或者小于最小整型的时候,初步模拟实现可以把数字字符串转换为整数,由于没有考虑正负号,所以只能转换为正数;初识化为非法有利于问题的解决,空字符串转换为整数0是一种非法转换。

qq_63179783的博客 2万+

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

关于atoi函数的使用和模拟实现

这篇文章是关于atoi函数是怎样使用的和我们如何模拟实现它的。话不多说,我们先从C++网站上关于atoi的函数信息入手。 好了,本节关于atoi函数的使用和模拟实现就讲到这,希望上面讲到的内容对大家有所帮助,如果有讲的不对的地方,还请大家指正,希望大家可以点赞,关注加收藏,谢谢大家。

2305_81151565的博客 1045

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

atoi函数的讲解和模拟实现

atoi函数简单来讲就是将字符串内的数字转换为int类型数据,以下介绍了一些atoi函数的细节和模拟实现。

2303_81060385的博客 1023

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

atoi函数的使用和模拟实现

第二,当指针在指向数字字符之前指向其他字符(除数字字符和空白字符以外的字符),不会进行第二个while循环进行计算,此时num == 0,则返回值为0;c.用sign控制符号的正负,并初始化为1,这里进行初始化是有必要的,假设没有初始化(同时对if语句修改),当数字字符前有’+‘’-‘号则结果正常,当数字字符前面没有’+‘’-‘号是则可能报错,因为此时sign没有初始化并且没有进入分支语句,所以是随机值,在返回值时是可能会溢出。c.数字字符前面有’+‘ ’-‘字符则作为整数的正负处理;

大学在读,感谢关注 1068

[C语言] atoi函数的功能和模拟实现

该函数使用来判断是否为空格,该函数参数若为空格则返回非0,参数若为非空格则返回0;该函数用来判断是否是数字字符,若是数字字符'0'到'9'返回非0,若不是数字字符返回0;2.空字符串的第一个函数为'\0',所以只需要判断字符串第一个函数是否为'\0'返回即可。当是数字字符时,将其减去'0'即转换为数字,再继续判断下个字符,若是非数字字符则直接返回。3.忽略空格即要跳过所有空格,我们需要用到isspace函数,这里简单介绍一下该函数。4.我们定义一个flag变量,若遇到'+'为1,遇到'-'为-1。

2301_80163814的博客 1493

【C语言】atoi函数的使用和模拟实现

本篇将介绍atoi函数的使用,通过实例讲解函数的使用方法,模拟实现atoi函数。

weixin_65476629的博客 1324

C语言之atoi函数的使用和模拟实现

atoi函数的使用和模拟实现

林林林的博客 668

模拟实现atoi和itoa函数

模拟实现atoi 思路: atoi函数,实现字符串到数字的转换,例如,将“1111”转成数字就是1111,在转的时候我们可以定义一个指针,随着指针的后移,把字符串的每一个字符,依次转成数字,另外还需注意,负号和空格问题,在代码中都应该考虑到。 代码: //模拟实现atoi long my_atoi(char*p) { int flag = 1; long number = 0;

yaszja的博客 642

了解C语言中的atoi函数和模拟实现

如果str中的第一个非空白字符序列不是一个有效的整数,或者因为str为空或者它只包含空白字符而不存在这样的序列,则不执行转换。

ANNE_fly的博客 414

模拟实现C库里的itoa()函数和atoi()函数

一、函数原型 int atoi(const char *nptr);将字符串转换为整型值 char* itoa(int value,char* str,int base);将整形转为字符串。这个函数有3个参数,第一个参数是要转换的数字,第二个参数是要写入转换结果的目标字符串,第三个参数是转换数字时所用的技基数,比如10代表十进制,2代表二进制。 两个函数都在C语言里的库函数里。 二、模拟实

qq_36534818的博客 667

【我爱C语言】详解字符函数isdigit和字符串转换函数(atoi和snprintf实现互相转换字符串)&&三种strlen模拟实现

本小节我们将学习字符分类函数,字符串转换函数,使用库函数实现函数的大小写转换,当然还有字符串转换成整数(isdigit和atoi),使用(snprintf)将整数怎么转换回字符串。最后还有strlen函数的三种模拟实现。文章干货满满,让我们学习起来!通过学习字符分类函数、字符串转换函数和字符串长度计算的原理和用法,我们可以更好地理解字符和字符串的处理方式,并能够灵活运用这些函数进行字符和字符串的处理。这些函数在实际的开发中经常会用到,掌握它们的使用方法对于提高开发效率和代码质量都很重要。

a_sen的博客 3009

模拟实现atoi和itoa函数。

atoi函数的作用是将字符串变量转换为整形变量。 在实现之前我们创建一个枚举类型,来记录目标字符串的特殊类型,空串、全为空格和全为0的情况。 enum State { EMPTY, ALLZERO, ALLSPACE, };//创建枚举便于分辨类型 int State = EMPTY; int myatoi(const char* arr) { if (*arr == '\0')//...

fapengcheng1996的博客 249

模拟实现库函数的atoi、atof和itoa

1.函数atoi  atoi (表示 alphanumeric to integer)是把字符串转换成整型数的一个函数。广泛的应用在计算机程序和办公软件中。atoi( ) 函数会扫描参数 nptr字符串,跳过前面的空白字符(例如空格,tab缩进等)。 原型:int atoi(const char *nptr),nptr:要进行转换的字符串; 功能:把字符串转换成整型数; 返回值:函数返回一...

weixin_33989780的博客 226
上一篇: 程序环境和预处理
下一篇: 顺序表(静态版本)-----动态版本的基础
GD_small_bit
博客等级 码龄4年 804粉丝 62原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值