C语言学习笔记---字符串转浮点函数

x33g5p2x  于2022-02-17 转载在 其他  
字(1.6k)|赞(0)|评价(0)|浏览(412)

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

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;
}

代码运行结果如下:

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

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类型就可以了,执行结果如下:

相关文章