atoi(),itoa() ,atol(),atof ()的实现

Posted 晓百

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了atoi(),itoa() ,atol(),atof ()的实现相关的知识,希望对你有一定的参考价值。

atoi(将字符串转换成整型数):atoi(const char *nptrnt )

函数说明 : atoi()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时(‘\0‘)才结束转换,并将结果返回。

itoa(将整型数转换成字符串):char *itoa( int value, char *string,int radix);

  原型说明:

  value:欲转换的数据。

  string:目标字符串的地址。

  radix:转换后的进制数,可以是10进制、16进制

 1 #include<iostream> 
 2 using namespace std; 
 3 int atoi1(char *s) 
 4 {  
 5     int sign=1,num=0;     
 6     if(*s==-)        
 7         sign=-1;   
 8     s++;     
 9     while((*s)!=\0)  
10     {          
11         num=num*10+(*s-0);  
12         s++;   
13     }      
14     return num*sign;   
15 }
16 char *itoa(int val, char *buf, unsigned radix)
17 {
18     char   *p;             
19     char   *firstdig;      
20     char   temp;           
21     unsigned   digval;     
22     p = buf;
23     if(val <0)
24     {
25         *p++ = -;
26         val = (unsigned long)(-(long)val);
27     }
28     firstdig = p; 
29     do{
30         digval = (unsigned)(val % radix);
31         val /= radix;
32        
33         if  (digval > 9)
34             *p++ = (char)(digval - 10 + a); 
35         else
36             *p++ = (char)(digval + 0);      
37     }while(val > 0);
38    
39     *p-- = \0 ;         
40     do{
41         temp = *p;
42         *p = *firstdig;
43         *firstdig = temp;
44         --p;
45         ++firstdig;        
46     }while(firstdig < p);  
47     return buf;
48 }
49 int main()
50 {
51     char *s="-16734",buf[20];
52     int a=34567;
53     cout<<atoi1(s)<<endl;
54     cout<<itoa(a,buf,10)<<endl;
55 
56     return 0;
57 }

 

atof(将字符串转换成浮点型数);double atof(const char *nptr);

函数说明 : atof()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时(‘\0‘)才结束转换,并将结果返回。参数nptr字符串可包含正负号、小数点或E(e)来表示指数部分,如123.456或123e-2。

 1 #include<iostream> 
 2 using namespace std; 
 3 
 4 double myatof(const char* sptr)
 5 {
 6     double temp=10;
 7     bool ispnum=true;
 8     double ans=0;
 9     if(*sptr==-)//判断是否是负数
10     {
11         ispnum=false;  
12     }
13     sptr++;
14     while(*sptr!=\0)//寻找小数点之前的数
15     {
16         if(*sptr==.)
17         { 
18             sptr++;
19             break;
20         }
21         ans=ans*10+(*sptr-0);
22         sptr++;
23     }
24     while(*sptr!=\0)//寻找小数点之后的数
25     {
26         ans=ans+(*sptr-0)/temp;
27         temp*=10;
28         sptr++;
29     }
30     if(ispnum) 
31         return ans;
32     else 
33         return ans*(-1);
34 }
35 int main()
36 {
37     char *s="-167.678";
38     cout<<myatof(s)<<endl;
39     return 0;
40 }

atol(将字符串转换成长整型数):long atol(const char *nptr);

函数说明 : atol()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时(‘\0‘)才结束转换,并将结果返回。

 1 #include<iostream> 
 2 #include <stdlib.h>  
 3 #include <ctype.h>  
 4 using namespace std;  
 5 
 6 #define N 50  
 7   
 8 long my_atol(const char *nptr)  
 9 {  
10     int c;  
11     long total = 0;  
12     int sign;  
13     while(isspace((int)(unsigned char)*nptr))//跳过前面的空格  
14         ++nptr;  
15     c = (int)(unsigned char)*nptr++;  
16     sign = c;  
17     if(c == - || c == +)  
18         c = (int)(unsigned char) *nptr++;  
19   
20     while(isdigit(c))  
21     {  
22         total = 10 * total + c- 0;  
23         c = (int)(unsigned char)*nptr++;  
24     }  
25     if(sign == -)  
26         return -total;  
27     else  
28         return total;  
29 }  
30   
31 int main(void)  
32 {  
33     char str[N];  
34     cout<<"Enter a string:"<<endl;;  
35     fgets(str,N,stdin);  
36     cout<<my_atol(str)<<endl;  
37     return 0;  
38 }  

 

以上是关于atoi(),itoa() ,atol(),atof ()的实现的主要内容,如果未能解决你的问题,请参考以下文章

C语言atoi和atol函数详解和示例

strtok/atoi/atof/atol函数用法 详解

atof atoi atol strlod等函数

STM32中使用strtok,atol,atoi,memset,strlen;后使用atoi系统卡死

AToI&IToA

itoa,atoi ##占位