字符串函数---atof()函数详解及实现(完整版)

atof()函数

atof():double atof(const char *str );

功 能: 把字符串转换成浮点数

str:要转换的字符串。

返回值:每个函数返回 double 值,此值由将输入字符作为数字解析而生成。 如果该输入无法转换为该类型的值,则返回值为 0.0。

函数说明 :atof()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('\0')才结束转换,并将结果返回,str字符串可包含正负号、小数点或E(e)来表示指数部分。

#include<iostream>

using namespace std;

double atof_my(const char *str)
{
	double s=0.0;

	double d=10.0;
	int jishu=0;

	bool falg=false;

	while(*str==' ')
	{
		str++;
	}

	if(*str=='-')//记录数字正负
	{
		falg=true;
		str++;
	}

	if(!(*str>='0'&&*str<='9'))//如果一开始非数字则退出,返回0.0
		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*=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*=10;
				jishu--;
			}
		}
		if(*str=='-')
		{
			str++;
			while(*str>='0'&&*str<='9')
			{
				jishu=jishu*10+*str-'0';
				str++;
			}
			while(jishu>0)
			{
				s/=10;
				jishu--;
			}
		}
	}

    return s*(falg?-1.0:1.0);
}

int main()
{
	char *s1="  123.456567567e-10";
	char *a1="  123.456567567e-10";
	
	char *s2="1234567.235e+10";
	char *a2="1234567.235e+10";

	char *s3="  123.45656\07567e-10";
	char *a3="  123.45656\07567e-10";

	double sum_1=atof_my(s1);
	double sum1=atof(a1);

	double sum_2=atof_my(s2);
	double sum2=atof(a2);

	double sum_3=atof_my(s3);//遇到'\0'结束
	double sum3=atof(a3);
	
	cout<<"atof_my:"<<sum_1<<endl;
	cout<<"atof   :"<<sum1<<endl;

	cout<<"atof_my:"<<sum_2<<endl;
	cout<<"atof   :"<<sum2<<endl;

	cout<<"atof_my:"<<sum_3<<endl;
	cout<<"atof   :"<<sum3<<endl;
	
	system("pause");
	return 0;
}
运行结果比较图:



  • 31
    点赞
  • 123
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值