采用C语言实现提取字符串中浮点型数字

采用C语言实现提取字符串浮点型数字

本文参考以下文章:

https://www.cnblogs.com/kangjianwei101/p/5220336.html

文章结构:

    • 采用`C语言`实现提取`字符串`中`浮点型数字`
  • 一、适用范围
  • 二、提取思想
  • 三、实现代码
  • 四、演示结果

一、适用范围

适用于标准C语言的应用环境(比如c51、stm32单片机),除外,不需要使用其他头文件。

二、提取思想

请结合代码来看,代码在下文:
1.对字符串数组进行从前到后进行遍历,由于标准的C语言字符串以‘\0’结尾,采用while循环while ( *Str != '\0' )
2.在遍历过程中进行字符串对比,看当前字符串是不是属于数字0~9或者为小数点.
3.当遍历到数字时,加入一个标志num_start = 1;,说明是发现数字了;
4.当遍历到小数点时,加入一个标志num_point=1,说明是发现小数点了;
5.再次发现数字,就根据小数点标志if(num_point >= 1)来判断,当前数字是整数部分,还是小数部分;
6.对于整数部分的数字则直接处理,num[Fnum+1] = num[Fnum+1]*10+(*Str - '0')
7.对于小数部分还需要判断当前是小数的第几位,再进行处理:

num_point++;
float fpoint = *Str - '0';
for(int i = 1;i<num_point;i++)
{
	fpoint = fpoint/10.;
}
num[Fnum+1] = num[Fnum+1] + fpoint;

8.将提取到的数字总数放入数组的开头 num[0] = Fnum,数组后面则是提取的数字。

三、实现代码

原文件下载(不需要积分):

https://download.csdn.net/download/qq_40824852/69932727

#include 

//定义最大数组长度
#define StrExtFloat_flen 64
//定义最大字符串长度
#define StrExtFloat_slen 512

void StrExtFloat(float *num,char* Str)
{
	//遍历深度
	int Fflag = 0;
	//数字个数
	int Fnum = 0;
	char num_start = 0,num_point = 0;
	//遍历到字符串尾部
	while ( *Str != '\0' )
	{	
		Fflag++;
		//防止查询超过边界
		if(Fflag>StrExtFloat_slen)
			break;
		//判断是不是数字
		if(*Str >='0' && *Str <= '9')
		{
			//printf("%c",*Str);
			//判断数字存在
			num_start = 1;
			//判断是否存在小数点
			if(num_point >= 1)
			{
				num_point++;
				//当前小数部分的数值
				float fpoint = *Str - '0';
				for(int i = 1;i<num_point;i++)
				{
					fpoint = fpoint/10.;
				}
				//加入小数部分
				num[Fnum+1] = num[Fnum+1] + fpoint;
			}
			else
			{
				//加入整数部分
				num[Fnum+1] = num[Fnum+1]*10+(*Str - '0');
			}
		}
		else if(*Str == '.') //判断为小数点
		{
			if(num_start==1)//发现存在小数点
			{
				num_point=1;
			}
		}
		else //判断为其他字符
		{
			if (num_start == 1)
			{
				Fnum++;//统计个数加一
			}
			//清空字符统计与小数点统计
			num_start = 0;
			num_point = 0;
		}
		//指针移动
		*(Str++);
	}
	//如果不是以字符结尾
	if (num_start == 1)
	{
		Fnum++;//统计个数加一
	}
	//放入提取到的数字个数
	num[0] = Fnum;
}


void main(void){
	char Str[100]="235.654hjfv92.88u98fj3wjf09w43f0f3f963.369";
	float num[StrExtFloat_flen] = {0.};
	
	void StrExtFloat(float *num,char* Str);
	StrExtFloat(num,Str);
	printf("\n Total:%2.0f",num[0]);
	for(int i=1;i<=num[0];i++)
		printf("\n %d:%.4f",i,num[i]);	
}

代码有完整注释,有疑问与建议,评论区留言。

四、演示结果

运行上述代码,结果如下:

 Total: 9
 1:235.6540
 2:92.8800
 3:98.0000
 4:3.0000
 5:9.0000
 6:43.0000
 7:0.0000
 8:3.0000
 9:963.3690

你可能感兴趣的:(c语言,stm32,字符串)