/* 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 %sn",str); result = myatof(str); printf("the result is %lfn",result); return 0;
} double myatof(const char *str)
{
char flag = 0; //表示正数
double res = 0.0;
double d = 10.0;
int e = 0;
while(*str != ' ')
{
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);
}
}