C语言实现字符串转浮点函数的示例

 更新时间:2022年02月18日 11:03:39   作者:嵌入式@hxydj  
字符串不仅可以转换为整数,也可以转换为浮点数,本文主要介绍了C语言实现字符串转浮点函数的示例,具有一定的参考价值,感兴趣的可以了解一下

  字符串不仅可以转换为整数,也可以转换为浮点数,字符串转浮点数函数原型如下:

     float __cdecl __mingw_strtof (const char * __restrict__, char ** __restrict__);
     double __cdecl __mingw_strtod (const char * __restrict__, char ** __restrict__);

  strtof函数返回值是一个单精度浮点数,strtod返回值是一个双精度浮点数。

  首先来看strtof函数,它的参数有两个。第一个参数指向要解释的以空字符结尾的字节字符串。第二个参数指向数字后的第一个字符。

  该函数首先丢弃尽可能多的空白字符,直到找到第一个非空白字符为止。然后从该字符开始,采用与浮点字面量类似的语法,尽可能多地使用有效的字符,并将其解释为数值。指向最后一个有效字符之后的字符串其余部分的指针存储在函数第二个参数中。

有效的浮点值可以是以下值之一:

十进制浮点表达式。它由以下部分组成:

  • (可选)加号或减号
  • 非空十进制数字序列可选地包含小数点字符(由当前C确定locale)(定义有效数字)
  • (可选),e或者E跟随可选的负号或加号和非空序列的十进制数字(定义指数)

二进制浮点表达式。它由以下部分组成:

(可选)加号或减号

  • 0x0X
  • 非空的十六进制数字序列可选地包含小数点字符(由当前C确定locale)(定义有效数字)
  • (可选),p或者P跟随可选的负号或加号和非空序列的十进制数字(定义指数)

无穷大表达式。它由以下部分组成:

  • (可选)加号或减号
  • INF或者INFINITY无视事件

非数字表达式。它由以下部分组成:

  • (可选)加号或减号
  • NANNAN(char_sequence)忽略该NAN部分的情况。char_sequence只能包含字母数字字符。结果是静态的NaN浮点值。

任何其他可能被当前安装的C接受的表达式 locale

  下面通过一个简单的例子演示strtof函数的用法。

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char** argv)
{
	char str[30] = "-123.456    5.672451e3  acde";
	char *pEnd;
	float ret1,ret2;

	ret1 = strtof(str, &pEnd);
	ret2 = strtof(pEnd, &pEnd);
	printf("数字1是: %.3f\n", ret1);
	printf("数字2是: %.3f\n", ret2);
	printf("字符串部分是: %s \n", pEnd);

	return 0;
}

  代码运行结果如下:

image.png

  在转换数字的过程中,遇到空白字符函数就会退出。同时函数的第二个参数会存储退出的位置,当再次调用函数的时候,就会接着上次退出的位置继续转换。

strtod函数和strtof函数用法基本一样,可以直接在上面程序的基础上修改。

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char** argv)
{
	char str[30] = "-123.456   5.672451e3  acde";
	char *pEnd;
	double ret1,ret2;

	ret1 = strtod(str, &pEnd);
	ret2 = strtod(pEnd, &pEnd);
	printf("数字1是: %lf\n", ret1);
	printf("数字2是: %lf\n", ret2);
	printf("字符串部分是: %s \n", pEnd);
        
	return 0;
}

  将返回值的类型修改为double类型就可以了,执行结果如下:

image.png

 到此这篇关于C语言实现字符串转浮点函数的示例的文章就介绍到这了,更多相关C语言 字符串转浮点函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 数组指针、指针数组以及二位数组的深入解析

    数组指针、指针数组以及二位数组的深入解析

    下面来讲讲多维数组与指针的关系。与普通数组一样,使用多维数组时,实际上将其自动转换为指向该数组第一个元素的指针
    2013-09-09
  • 浅谈C++类型转换几种情况

    浅谈C++类型转换几种情况

    本文主要介绍了几种C++类型转换,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • c++字符串分割的方法

    c++字符串分割的方法

    这篇文章主要介绍了c++字符串分割的方法,帮助大家更好的理解和学习c++,感兴趣的朋友可以了解下
    2020-08-08
  • C++11中多线程编程-std::async的深入讲解

    C++11中多线程编程-std::async的深入讲解

    这篇文章主要给大家介绍了关于C++11中多线程编程-std::async的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • 好用的C++ string Format“函数”介绍

    好用的C++ string Format“函数”介绍

    大家好,本篇文章主要讲的是好用的C++ string Format“函数”介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • 详解C++虚函数的工作原理

    详解C++虚函数的工作原理

    这篇文章主要介绍了C++虚函数的工作原理的的相关资料,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-06-06
  • C++如何解决rand()函数生成的随机数每次都一样的问题

    C++如何解决rand()函数生成的随机数每次都一样的问题

    这篇文章主要介绍了C++如何解决rand()函数生成的随机数每次都一样的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • c++类成员函数如何做函数参数

    c++类成员函数如何做函数参数

    这篇文章主要介绍了c++类成员函数如何做函数参数问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • 关于C语言和命令行之间的交互问题

    关于C语言和命令行之间的交互问题

    这篇文章主要介绍了C语言和命令行之间的交互,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-07-07
  • 详解C++实现拓扑排序算法

    详解C++实现拓扑排序算法

    拓扑排序是对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在v之前。本文将对其原理进行讲解,并且用C++进行实现
    2021-06-06

最新评论