您的位置:首页 > 其它

模拟实现atof函数

2018-02-28 21:52 267 查看
atof()函数
atof():double atof(const char* str);功能:把字符串转换成浮点数str:要转换的字符串返回值:返回值为double值。如果该输入无法转换为该类型的值,则返回值为0.0问题:1.跳过空格字符          2.记录正负值          3.遇到数字才开始转换,如果是非数字或字符串结束('\0')结束转换 
#include<iostream>
using namespace std;
double my_atof(const char* str)
{
double s = 0.0;
double d = 10.0;
int jishu = 0;
while (*str == ' ')
{
str++;
}
bool flag = false;
while (*str == '-')//记录数字正负
{
flag = true;
str++;
}
if (!(*str >= '0'&&*str <= '9'))//非数字则退出
{
return s;
}
while (*str >= '0'&&*str <= '9'&&*str != '.')//计算小数点前整数部分
{
s = s*10.0 + *str - '0';
str++;
}
if (*str == '.')//小数点
str++;
while (*str >= '0'&&*str <= '9')//小数点后面部分
{
s = s + (*str - '0') / d;
d = d*10.0;
str++;
}
if (*str == 'e' || *str == 'E')//考虑科学计数法
{
str++;
if (*str == '+')
{
str++;
while (*str >= '0'&&*str <= '9')
{
jishu = jishu * 10 + *str - '0';
str++;
}
while (jishu > 0)
{
s = s * 10;
jishu--;
}
}
if (*str == '-')
{
str++;
while (*str >= '0'&&*str <= '9')
{
jishu = jishu * 10 + *str - '0';
str++;
}
while (jishu > 0)
{
s = s / 10;
jishu--;
}
}
}
return s*(flag ? -1.0 : 1.0);
}
int main()
{
char *s1 = "123.456e-10";
char *s2 = "123.456e-10";
double sum1 = my_atof(s1);
double sum2 = atof(s2);
char *r1 = "-123.456e-10";
char *r2 = "-123.456e-10";
double ret1 = my_atof(r1);
double ret2= atof(r2);
cout << ret1 << endl;
cout << ret2 << endl;

system("pause");
return 0;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: