//编写函数实现库函数atof
#include <stdio.h>
#include <assert.h>
#include <ctype.h>
#include <math.h>
double calculate(const char *src, int flag)
{
double num = 0.0;
int n = 0;
int count = 0;
while (*src)
{
if ((*src >= '0') && (*src <= '9'))//推断输⼊入是否为⾮非数组字符
{
num = num * 10 + (*src - '0');
src++;
if (n)
{
count++;
}
}
else if (*src == '.')
{
n = 1;
src++;
}
else
{
num = 0;
break;
}
}
if (n)
{
num = num / powl(10,count);
}
return flag * num;
}
double str_to_int(const char *str)
{
double num = 0.0;
int flag = 1;
if (str != NULL && *str != '\0')
{
while (isspace(*str))
{
str++;
}
if (*str == '+')
str++;
else if (*str == '-')
{
str++;
flag = -1;
}
if (*str != '\0')
{
num = calculate(str, flag);
}
}
return num;
}
int main()
{
printf("%f\n", str_to_int(" +23.45"));
printf("%f\n", str_to_int(" -2.345"));
printf("%f\n", str_to_int("+234.5"));
printf("%f\n", str_to_int("-2345.44"));
printf("%f\n", str_to_int("2345"));
printf("%f\n", str_to_int("-1111.11"));
printf("%f\n", str_to_int(""));
printf("%f\n", str_to_int("123ab"));
return 0;
}