天天看点

用c语言编写的atof函数,自己实现的atof()和atoi()代码

# re: 自己实现的atof()和atoi()代码  回复  更多评论

2014-09-05 22:27 by memristor

定义函数 double atof(const char *nptr);

函数说明 atof()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数

字或正负符号才开始做转换,而再遇到非数字或字符串结束时

('\0')才结束转换,并将结果返回。参数nptr字符串可包含正负

号、小数点或E(e)来表示指数部分,如123.456或123e-2。

返回值 返回转换后的浮点型数。

#include

#include

#include

#include

#include

double myatof(const char*s)

{

assert(s!=NULL);

double val,val2,power;

int sign,sign2,i;

//去掉字符串中的空格

for(i=0;isspace(s[i]);++i)

;

//判断正负数 ,并将i指向下一个位置

sign = (s[i] == '-') ? -1:1;

if(s[i] == '+' || s[i] == '-')

i++;

//取浮点数的整数部分

for(val=0.0;isdigit(s[i]) && s[i] !=0;++i)

val = 10*val+s[i]-'0';

//取小数点

if(s[i] == '.')

i++; //后一个位置

//取小数点后面数

for(power=1.0;isdigit(s[i]) && s[i] !=0;++i)

{

val = 10*val+s[i]-'0';

power*=10; //float 放大的倍数

}

val=sign*val/power;

//如果有e的话处理e后面的数字

if(s[i]=='e' || s[i]== 'E'){

i++;

sign2 = (s[i] == '-')?-1:1;

if(s[i] == '+' || s[i] == '-')

i++;

for(val2=0.0;isdigit(s[i]) && s[i] !=0;++i){

val2 = 10*val2+s[i]-'0';

}

if(sign2 == -1)

return val/pow(10,val2);

else

return val*pow(10,val2);

}

return val;

}