atof函数实现代码,原理

/*
atof函数实现字符串向double数据的转换,
*/

#include <stdio.h>
double myatof(const char *str);
int main()
{
    //char str[20] = "sd sdf32.47e+2df";
    char str[20] = "sd sdf32.47e2df";
    double result = 0.0;
    printf("the str is %s\n",str);
    result = myatof(str);
 printf("the result is %lf\n",result);
    return 0;
}
double myatof(const char *str)
{
    char flag = 0;  //表示正数
 double res = 0.0;
 double d = 10.0;
 int e = 0;
 while(*str != '\0')
 {
        if( !(*str >= '0' && *str <= '9'))  //找到字符串中的第一个数字
  {
       str++;
    continue;
  }
  if(*(str-1) == '-')
  {
      flag = 1;  //表示是一个负数
  }
  
  while(*str >= '0' && *str <= '9')
  {
       res = res *10.0 + (*str - '0');
    str++;
  }
  if(*str == '.')
  {
      str++;
  }
        while(*str >= '0' && *str <= '9')
  {
       res = res + (*str - '0')/d;
    d = d*10;
    str++;
  }
  if(*str == 'e' || *str == 'E')
  {
      str++;
   if(*str == '+')
   {
       str++;
    while(*str >= '0' && *str <= '9')
    {
        e = e*10 + (*str - '0');
     str++;
    }
    while(e>0)
    {
        res = res*10;
     e--;
    }
   }
   if(*str == '-')
   {
       str++;
    while(*str >= '0' && *str <= '9')
    {
        e = e*10 + (*str - '0');
     str++;
    }
    while(e>0)
    {
        res = res/10;
     e--;
    }
   }
            if(*str >= '0' && *str <= '9')
   {
    while(*str >= '0' && *str <= '9')
    {
        e = e*10 + (*str - '0');
     str++;
    }
    while(e>0)
    {
        res = res*10;
     e--;
    }
   }
  }
  return res*(flag?-1:1);
       
 }
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值