atof函数的实现 查找最长数字子串

本文介绍了一个用C++实现的atof函数,该函数能够将字符串转换为浮点数,并处理正负号及小数部分。此外,还提供了一种查找并返回输入字符串中最长连续数字子串的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 atof的实现

 

#include <iostream>
using namespace std;

double my_atof(const char * str)
{
	double res = 0.0;
	double d = 10.0;
	bool flag = false;

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

	if (*str == '-')
	{
		flag = true;
		str++;
	}
	if (!(*str <= '9') || !(*str >= '0'))
	{
		cout << "非数字串" << endl;
	}
		
	while (*str <= '9' && *str >= '0' && *str != '.')
	{
		res = res * 10  + (*str) - '0';
		str++;
	}
	if (*str == '\0')
		return res * (flag ? -1.0 : 1.0);

	if (*str == '.')
	{
		str++;
	}

	while (*str <= '9' && *str >= '0' && *str != '\0')
	{
		res = res  + ((*str) - '0') / d;
		d *= 10.0;
		str++;
	}
	
	return res * (flag ? -1.0 : 1.0);

}


int main()
{
	char *test1 = "   -123.342";
	cout << my_atof(test1) << endl;
	system("pause");
	return 0;
}
查找最长数字子串

#include <iostream>
using namespace std;

int maxContinueNumber(const char * src, char * dst)
{
	int start = 0;
	int end = 0;
	int max = 0;

	int startTmp = 0;
	int maxTmp = 0;
	int cur = 0;

	int length = strlen(src);
	char * tmp = dst;
	for (; cur < length; cur++)
	{
		if (*(src + cur) <= '9' && *(src + cur) >= '0')
		{
			if (maxTmp == 0)
			{
				startTmp = cur;
			}
			maxTmp++;
		}
		else
		{
			if (maxTmp > max)
			{
				start = startTmp;
				end = cur;
				max = maxTmp;
				maxTmp = 0;
			}
		}
	}
	if (maxTmp > max)
	{
		start = startTmp;
		end = cur;
		max = maxTmp;
		maxTmp = 0;
	}

	for (int i = start; i < end; i++)
	{
		*dst++ = src[i];
	}
	*dst = '\0';
	cout << tmp << endl;
	return max;

}

int main()
{
	char test[] = "abc123ad12345";
	char tmp[100] = "";
	cout << maxContinueNumber(test, tmp) << endl;
	system("pause");
	return 0;
}


                                                                                                                                                                                                                                                                                                                       

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值