用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;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值