模拟实现atof函数

本文详细介绍了如何在C语言中从字符串模拟实现浮点数转换函数atof。通过分析输入字符串,逐个处理数字、小数点、正负号等元素,将它们转化为对应的浮点数值。这个过程涉及到了字符解析、数字转换以及错误处理等方面的知识。
摘要由CSDN通过智能技术生成
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;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值