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

xiaoxiao2021-02-28  9

模拟实现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
转载请注明原文地址: https://www.6miu.com/read-200256.html

最新回复(0)