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

2018-06-17 22:06:00来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

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 }  

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:条形码问题 dp+求某个序列在某种排列中的序号的方法

下一篇:51nod 1130 N的阶乘的长度(斯特林近似)