模拟实现C库的atoi和itoa——题集(二十三)
来源:互联网 发布:2015年淘宝总交易额 编辑:程序博客网 时间:2024/06/14 10:58
模拟实现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->aelsetmp.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为空)
注:要想的到以下结果,代码去注释即可。
分享如上,如有错误,望斧正!愿大家学得开心,共同进步!
阅读全文
0 0
- 模拟实现C库的atoi和itoa——题集(二十三)
- 模拟实现C库的atoi和itoa
- 模拟实现c库的atoi和itoa
- 模拟实现C库里的itoa()函数和atoi()函数
- atoi和itoa的C实现
- atoi & itoa的c实现
- 模拟实现atoi、itoa
- 模拟c库函数atoi和itoa
- atoi和itoa的实现
- atoi和itoa的实现
- atoi 和itoa的实现
- atoi和itoa的实现
- atoi 和 itoa的实现
- atoi和itoa的实现
- 【字符串】模拟实现atoi和itoa
- 模拟实现atoi和itoa函数
- 模拟itoa和atoi
- 模拟C库中atoi与itoa
- 数据库索引的作用和优点缺点
- Java基础之泛型
- numpy.tile
- Java进阶之虚拟机《一》:Java内存区域与内存溢出
- Kubernetes的基本概念说明
- 模拟实现C库的atoi和itoa——题集(二十三)
- [C专家]分析C语言声明——只有编译器才会喜欢的语法
- NavigationView使用简介
- Python5:Script
- 编写真正的单元测试
- 利用Python进行数据分析(2)—— Numpy Basic(2)
- 多标签图像分类任务的评价方法-mAP
- bzoj4810: [Ynoi2017]由乃的玉米田
- Java学习第二十二天