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 ()的实现的主要内容,如果未能解决你的问题,请参考以下文章