模拟实现C库的atoi和itoa——题集(二十三)

《剑指offer》经典面试题:模拟实现atoi() 《剑指off》经典面试题,模拟实现atoi(),并介绍它的兄弟itoa()和表兄弟sprintf()的使用方法。 阅读详情

模拟实现C库的atoi和itoa——题集(二十三)

       今天主要分享一下模拟实现C库的atoi和itoa的代码实现和运行示例.

       C库的atoi的定义如下:

       int atoi (const char * str);

      模拟实现C库的atoi的源代码和运行示例。

源代码如下:

#include<iostream>
using namespace std;

int AtoI (const char * str){
	int num=0;
int flag=1;标志是正数还是负数
	if(*str=='+' || *str=='-')
	{
		if(*str=='-')
			flag=-1;
		*str++;
	}

	while(*str){
		if(*str>'9' || *str<'0')break;
			num= num*10+(*str++-'0');
	}

	return num*flag;
}

int main(){
	cout<<"模拟实现atoi "<<endl<<endl;
	cout<<"AtoI(\"123\"): "<<AtoI("123")<<endl;
	cout<<"AtoI(\"-123\"): "<<AtoI("-123")<<endl;
	cout<<"AtoI(\"0.123\"): "<<AtoI("0.123")<<endl;
	cout<<"AtoI(\"12x3\"): "<<AtoI("12x3")<<endl;
	cout<<"AtoI(\"12-3\"): "<<AtoI("12-3")<<endl;
	cout<<"AtoI(\"x12e3\"): "<<AtoI("x12e3")<<endl;
cout<<"AtoI(\"-\"): "<<AtoI("-")<<endl<<endl;
	
	system("pause");
	return 0;
}

运行结果:

 

       C库的itoa的定义如下:

       char *  itoa ( int value, char * str, int base );

       虽然规定数字基用于表示值作为字符串,在2和36之间,10表示十进制基数,16十六进制,8八进制和2二进制。但是实验的结果证明这仅仅是规定:

      发现当base(数字基)等于1时,itoa会崩溃,我猜想是因为代码无限循环导致的。截图如下:

 

       同时base(数字基)大于32时,依旧能得到相应进制而转化的字符串,只是传化出来的字符不可见而已,截图如下:

 

       返回值与str值相同。

       模拟实现C库的itoa的源代码和运行示例。

源代码如下:

#include<iostream>
using namespace std;
#include<stack>

char *  ItoA ( int value, char * str, int base ){//int会把浮点转化为整形,不用考虑小数
	char* dst=str;
	int val=value;
	if(value==0){//值为0,直接转化为0,不用继续
		*dst++='0';
		*dst='\0';
		return str;
	}

	//if(base>32 || base<2){//修正//对数字基做检查,严格规定在[2,32],否则str为空
	//	*dst='\0';
	//	return str;
	//}

	int num=1;
	stack<char> tmp;//得到逆置的字符串——借助栈得到正序的
	while(num){
		num=val/base;
		int rem=val%base;
		if(rem<10)
			tmp.push(rem+'0');//>10+39->a
		else
			tmp.push(rem-10+'a');//>10+39->a//跳过大写字母
		val=num;
	}

	while(!tmp.empty()){
		*dst++=tmp.top();
		tmp.pop();
	}

	*dst='\0';
	return str;
}

int main(){
	cout<<"模拟实现itoa"<<endl<<endl;
	cout<<"ItoA(0,dst,2): "<<ItoA(0,dst,2)<<endl;
	cout<<"ItoA(-0,dst,2): "<<ItoA(-0,dst,2)<<endl;
	cout<<"ItoA(127,dst,10): "<<ItoA(127,dst,10)<<endl;
	cout<<"ItoA(10,dst,2): "<<ItoA(10,dst,2)<<endl;
	cout<<"ItoA(16,dst,8): "<<ItoA(16,dst,8)<<endl;
	cout<<"ItoA(48,dst,2): "<<ItoA(48,dst,2)<<endl;
	cout<<"ItoA(32,dst,48): "<<ItoA(32,dst,48)<<endl;
	cout<<"ItoA(99,dst,53): "<<ItoA(32,dst,53)<<endl;
        cout<<"ItoA(99,dst,66): "<<ItoA(99,dst,66)<<endl<<endl;
	//cout<<"ItoA(22,dst,1): "<<ItoA(22,dst,1)<<endl<<endl;
	
	system("pause");
	return 0;
}
运行结果:

完全模拟c库中的itoa得到的运行结果:

 

      修正c库中的itoa得到的运行结果:(数字基做检查,严格规定在[2,32],否则str为空)

      注:要想的到以下结果,代码去注释即可。

 

       分享如上,如有错误,望斧正!愿大家学得开心,共同进步!
YOLOv8改进 - 注意力篇 - 引入CAA注意力机制 阅读详情

相关推荐

AI Agent技能评测框架SkillsBench:从黑盒评估到白盒技能拆解

在人工智能领域,模型评估是衡量技术进展的核心环节。传统评测基准如GLUE、MMLU主要关注模型的通用认知能力,但实际工程应用中,AI Agent需要的是在复杂场景中协调多种能力的“职业技能”。SkillsBench创新性地将Agent能力进行原子化拆解,定义了理解规划、工具调用、推理决策、交互安全等技能维度,并通过领域专家构建的评测集确保生态效度。这一框架为Agent开发提供了精准的“度量衡”,使性能优化从经验驱动转向数据驱动,同时为不同模型和框架提供了公平比较的基础,推动了AI Agent生态从“野蛮生长

weixin_30530339的博客 389

atoi和itoa的模拟实现

1.atoi函数: 函数原型: int atoi (const char * str); 该函数的功能是将字符串转化为整型。分以下几种情况: 1)如果该字符串的最开始是 -,并且后面加的是数字,那么转化的整数是负整数。 2)如果该字符串的最开始是+ 或者是数字,那么转化的是正整数。 3)如果最开始是-/+ 加其他字符,就是不合法的,直接返回0. 4)考虑溢出,正溢出和负溢出。 模...

Qiana_wq的博客 519

74HC165级联踩坑实录:STM32读取32路开关状态,时序调试与常见问题排查

本文详细介绍了74HC165级联在STM32读取32路开关状态时的时序调试与常见问题排查。从硬件设计的PCB布局优化、电源噪声控制,到软件时序的精确调校和数据采集策略,提供了完整的解决方案。通过逻辑分析仪和示波器的高效使用,解决了信号延迟和干扰问题,最终实现了稳定可靠的32路信号读取。

weixin_34046298的博客 313

模拟实现c库的atoi和itoa

atoi是将数字符号的字符串转化为整形。 itoa是将整形转化为字符串。 参考代码如下 void Reverse(char * start,char* end) { char *l = start; char *r = end; while (l < r) std::swap(*l++,*r--); } char *my_itoa( int value, char *str

wxx2222222的博客 444

PCB布局规范及其注意事项(纯干货)

这样做的好处是信号1,3层不会有串扰,4和5作为电源有紧密的耦合,3个信号层都有GND平面可以参考,且不会互相产生串扰,唯一的缺点是布线的层面只有3个信号层(信号03的是最适合来传输高速信号,因为该层的二面都有屏蔽,防止干扰传出,也防止干扰传入)33、影响阻抗匹配的参数(ER介电常数(1GHZ以下默认为4.2,以上的话问板厂),H介质厚度(就是内层压合的PP片厚度),W走线的线宽,T走线的厚度(铜厚/减小线的厚度可以增大阻抗))我这里使用的是CITS25来计算阻抗。

qq_42379138的博客 8846

AppStore逆向分析:从网络抓包到自动化模拟的完整实践

在移动应用生态中,理解客户端与服务器之间的通信协议是进行自动化测试、数据分析和系统集成的关键技术基础。通过分析网络请求与响应,可以深入理解认证、会话管理和数据交换的原理,这对于构建稳定的自动化流程至关重要。其技术价值在于能够实现合法场景下的流程模拟,例如应用元数据监控、沙盒环境测试或内部工具开发。在实际应用场景中,开发者常需处理登录态维持、请求签名验证及风控策略应对等挑战。本文聚焦于AppStore这一封闭生态,详细拆解了其登录、查询等核心环节的通信机制,并探讨了使用Python结合抓包工具进行安全逆向分析

weixin_42524171的博客 926

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

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

weixin_33989780的博客 226

Win10 + Linux 双系统删除(Linux)

删除Linux所使用的磁盘分区 进入此电脑->计算机->管理->磁盘管理

weixin_52247624的博客 944

【字符串】模拟实现atoi和itoa

atoi 函数用来将字符串转化为数字的,C++手册上是这样描述的The function first discards as many whitespace characters as necessary until the first non-whitespace character is found. Then, starting from this character, takes an op

菜鸟成长记 670

零基础也能懂的Arduino ESP32离线安装包图文教程

手把手教你完成Arduino ESP32离线安装包的配置,无需联网也能快速搭建开发环境,适合初学者和网络受限用户,轻松实现arduino esp32离线安装包部署。

weixin_36213081的博客 2677

ROS2入门到精通—— 2-9 ROS2实战:Nav2常见的工程问题(参考3D视觉工坊)

本文介绍了Nav2常见的工程问题,还有调试DWB的一些经验,以及DWB的一些缺点

BigDavid123的博客 1068

模拟实现C库的atoi和itoa

1、C库的atoi的模拟实现 2、C库的itoa的模拟实现

风华绝代 1181

RK3568驱动 SPI主/从 配置

RK3568 SPI 配置指南 内核配置:启用用户空间驱动(主)和从模式协议支持。 主模式:设备树设置status="okay"、max-freq及引脚复用,子节点compatible="rockchip,spidev"。 从模式:需添加spi-slave属性,子节点命名以slave@X开头。 编译烧写:修改设备树后编译内核或全量镜像,验证/dev/spidevX.Y节点。 测试:使用spidev_test工具,主模式可环回测试,从模式需与主设备通信。 (关键:从模式强制spi-slave和命名规则,频率匹

文石_2009的博客 1146

atoi & itoa 的模拟实现

库函数 atoi 的模拟实现 用法:将字符串里的数字字符转化为整形数,返回整形值。 int my_atoi(char* ptr) { assert(ptr); int flag = 0; int num = 0; char* pch = ptr; while (*ptr) { if (*pch == '-') { flag = 1; } else if ...

Adenson的博客 501

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

atoi函数和itoa函数以及模拟使用

atoi函数的作用是把一个字符串换成一个整型数据,该函数包含于头文件中。1.空字符返回数字0;2.数字字符前有空白字符跳过;3.数字字符前有+、-号,做整数类型的正负处理;4.数字字符前有其他字符返回0;

weixin_63779802的博客 3306

jre9下载 jdk9

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

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

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

qq_36534818的博客 667

模拟实现atoi和itoa函数

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

yaszja的博客 642

C语言面试题小练——第14天:模拟实现atoi()和itoa()

1. 编写函数实现字符串转整型—— 2. 编写函数实现整型转字符串

Super辉sir的博客 900

自己用C语言写itoa 函数和atoi函数

有些库中有atoi()函数,但没有itoa()函数,怎么办?自己写啊!!!一:先来看看库atoi()函数和itoa()函数的用法:1.atoi 是把字符串转换成整型数的一个函数,int atoi(const char *nptr) 函数会扫描参数 nptr字符串,跳过前面的空白字符(例如空格,tab缩进)等,可以通过isspace( )函数来检测),直到遇上数字或正负符号才开始做转换,而在遇到非数...

魏波 9626

c语言itoa函数用指针怎么写,C语言itoa()函数和atoi()函数

以下是用itoa()函数将整数转换为字符串的一个例子:# include # include void main (void){int num = ;char str[];itoa(num, str, );printf("The number 'num' is %d and the string 'str' is %s. \n" ,num, str);}itoa()函数有3个参数:第一个参数是要转...

weixin_31256683的博客 462

模拟itoa和atoi

模拟实现atoi函数原型:int atoi ( const char * str );传入一个char*,返回值为intint my_atoi(const char* str) { assert(str); int num = 0; int flag = 1; //跳过空白字符 while (*str == ' ' || *str == '\t' || *st

sayhello_world的博客 365

数字与字符串之间的相互转换(itoa atoi)

一、数字转换为字符串 C语言提供了几个标准库函数,可以将任意类型(整型、长整型、浮点型等)的数字转换为字符串,以下是几个常用函数: itoa():将整型值转换为字符串 ltoa():将长整型值转换为字符串 ultoa():将无符号长整型值转换为字符串 gcvt():将浮点型数转换为字符串,取四舍五入 ecvt():将双精度浮点型值转换为字符串,转换结果中不包含十进制小数点 fcvt():指定位数...

yam_sunshine的博客 1613

模拟c库函数atoi和itoa

模拟c库函数atoi和itoaatoi模拟://字符串转整数int my_atoi(char* str) { assert(str); int s = 0; int flag = 1; while ((*str) == ' ') //去掉空格 { str++; } if (*str == '-') { flag = -1; str++; } while (*str !=

心飞扬 587

模拟实现atoi、itoa

模拟实现atoi int my_atoi(const char *str) { assert(str); int res = 0;//保存结果 int sign = 1;//符号标志 char *p = (char *)str; while(*p != '\0') { while(*p == ' ') { ...

小心眼儿猫的博客 261

模拟实现atoi

模拟实现atoi 分析: 需要对特殊情况进行处理。 字符转整数 考虑输入的字符串是否为NULL、空字符串 考虑输入的字符串是否包含正负号 考虑输入的字符串是否会发生上溢或下溢(正整数的值是0X7FFFFFFF,最小的负整数是0X80000000) 如何区分正常返回数字0和不合法的返回 ———————————————— 代码; my_atoi(const char *str) { as...

xinrui_z的博客 124

模拟库函数 atoi 和 itoa

atoi 原型: int atoi( const char *string ); atio()函数传入一个 char *,返回 int 。 int my_atoi(const char *str) { assert(str); int num = 0; int flag = 1; //跳过空白字符 while (*str == ' ' || *s...

askunix 1206

模拟实现atoi和itoa以及100G 的IP地址求出现次数最多的前K个IP

1.模拟实现C库的atoi和itoa。 2.给一个超过100G的log file, log中存着IP地址, 设计算法找到出现次数最多的100个IP地址? 1.题考察面试者的思维方式:完整性和鲁棒性 先想好测试用例,沟通好错误处理,才能满意的做完。错误需要考虑的情况有: 1.当字符串为空时返回0,0字符串返回值也是0,但是两者的含义不同,我们应该做到区分,怎么区分? 定义全局变量,设

Steve_Abelieve 1043
上一篇: 模拟实现memcpy和memmove——题集(二十二)
下一篇: 简析fork和vfork区别以及进程和线程的区别和联系
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值