字符串函数---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;
}

运行结果比较图:

时间: 2024-08-03 17:59:14

字符串函数---atof()函数详解及实现(完整版)的相关文章

Python面试合集 史上最全面Python面试题和详解(10套) 完整版

本文件内含10个文档,文档格式为md,可以以文本的形式打开.内容如题,全面的Python面试题和详解,需要的朋友可下载试试! 包含:2019 Python最新面试题及答案16道题.110道Python面试题(上).最常见的 35 个 Python 面试题及答案(2018 版).整理的最全 python常见面试题(基本必考)等! 下载地址 https://pan.baidu.com/s/1XgpPig-KpR8ox0vWuTwVIw 如需提取码: [打开微信]->[扫描下方二维码]->[关注数据

PHP截取字符串函数substr()函数实例用法详解

在PHP中有一项非常重要的技术,就是截取指定字符串中指定长度的字符.PHP对于字符串截取可以使用PHP预定义函数substr()函数来实现.下面就来介绍一下substr()函数的语法及其应用. substr()函数语法格式如下:大理石平台厂家 1 substr(string, start, length); substr()函数参数说明如下: 参 数 说 明 string 指定字符串对象 start 指定开始截取字符串的位置.如果参数start为负数,则从字符串的末尾开始截取 length 可选

wordpress分类目录函数:wp_list_cats参数详解

今天修改主题模板时相直接调用分类目录,查了一下分类目录函数wp_list_cats(); WordPress分类目录常用格式 <?php wp_list_cats(“sort_column=ID&hide_empty=0&optioncount=1″);?> 该函数表示:分类目录按ID排列,不显示没有文章的分类,显示分类目录下的文章数量 wp_list_cats函数参数如下: sort_column默认值为ID,可选ID 或 name,分别表示按 ID 值或分类名称排序sort

c++中内存拷贝函数(C++ memcpy)详解

原型:void*memcpy(void*dest, const void*src,unsigned int count); 功能:由src所指内存区域复制count个字节到dest所指内存区域. 说明:src和dest所指内存区域不能重叠,函数返回指向dest的指针. 举例: // memcpy.c #include <stdlib.h> #include <string.h> main() { char *s= "Golden Global View "; c

jQuery height()、innerHeight()、outerHeight()函数的区别详解

jQuery height().innerHeight().outerHeight()函数的区别详解 在jQuery中,获取元素高度的函数有3个,它们分别是height(). innerHeight().outerHeight(). 与此相对应的是,获取元素宽度的函数也有3个,它们分别是width(). innerWidth().outerWidth(). 在这里,我们以height().innerHeight().outerHeight()3个函数为例,来详细介绍它们之间的区别. 下面我们以元

setAttribute()函数的用法详解

setAttribute()函数的用法详解:在动态创建元素设置元素的属性的时候setAttribute()函数用处很大,它可以动态的设置元素的属性,下面介绍一下它的用法.语法结构: setAttribute(name, value) 1).name表示要设置的属性.2).value表示属性值.代码实例如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta nam

jQuery的next()函数的使用详解

jQuery的next()函数的使用详解:此函数在代码中有大量的应用,下面就结合实例介绍一下此函数的用法.它可以取得一个包含匹配元素集合中每一个元素紧邻的后面同辈元素的元素集合.在上面的概念中有下面几点需要特别注意:1."紧邻",也就是说获取的元素必须是匹配元素所紧邻的,中间不能够有其他的元素间隔.2."同辈",也就是说获取的元素必须和匹配是同级元素.3."后面",也就是i说获取的元素必须位于匹配元素的后面.语法结构: $(selector).n

recv函数的用法详解

recv函数 int recv( SOCKET s,     char FAR *buf,      int len,     int flags     ); 不论是客户还是服务器应用程序都用recv函数从TCP连接的另一端接收数据. 该函数的第一个参数指定接收端套接字描述符: 第二个参数指明一个缓冲区,该缓冲区用来存放recv函数接收到的数据: 第三个参数指明buf的长度: 第四个参数一般置0. 这 里只描述同步Socket的recv函数的执行流程.当应用程序调用recv函数时,recv先等

SQL Server 2008 分区函数和分区表详解

SQL Server 2008 分区函数和分区表详解 2012-10-28 20:06 来源:博客园 作者:zhijianliutang 字号:T|T [摘要]本文详细介绍SQL Server 2008 分区函数和分区表,包括查询某个分区.归档数据.添加分区.删除分区等内容. 当我们数据量比较大的时候,我们需要将大型表拆分为多个较小的表,则只访问部门数据的查询就可以更快的运行,基本原理就是,因为要扫描的数据变的更小.维护任务(例如,重新生成索引或备份表)也可以更快的运行. 我们可以再不通过将表物

javascript 用函数语句和表达式定义函数的区别详解

通常我们会看到以下两种定义函数的方式: // 函数语句 function fn(str) { console.log(str); }; // 表达式定义 var fnx=function(str) { console.log(str+ ' from fnx'); }; 两种方式都创建了新的函数对象, 但函数声明语句的函数名是一个变量名, 变量指向函数对象, 和通过var声明变量一样,函数定义语句中的函数被显示地提前到了脚本或函数的顶部, 因此它们在整个脚本和函数内都是可见的,但是使用var 表达