求一个字符串中最长数字串及其长度 #华为2018年春招机试题#

该博客探讨了如何在字符串中找到最长的数字序列及其起始位置和长度,这是华为2018年春季招聘的机试题目。通过遍历字符串,使用变量跟踪数字序列的起点、长度以及临时信息来解决此问题。

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


给定一个字符串,输出字符串中最长的数字串,并把这个数字串的长度输出
例如输入:abcd12345ed125ef123058789
输出:123058789,9


分析:(1)怎么区分是不是数字 ==> s[i]>='0' && s[i]<='9'

(2)用一个变量记住最长数字串从第几个字符开始,用一个变量记住最长数字串的长度,遍历字符串的过程中还需要两个临时变量记录数字串开始位置和其长度。

#include<iostream>
using namespace std;

void FindLongestNumStr(const char* pstr,size_t length);
int main()
{
	char pstr[] = "abcd12345ed125ef123058789cdef1234567890ab";
	size_t length = sizeof(pstr)/sizeof(char)-1;
	cout<<length<<endl;
	FindLongestNumStr(pstr,length);
	return 0;
}
void FindLongestNumStr(const char* pstr,size_t length)
{
	int i_max_start = 0;
	int i_temp_start = 0;
	int i_max_length = 0;
	int i_temp_length = 0;
	for(int i = 0;i < length;i++)
	{
		//如果是数字
		if(pstr[i]>='0' && pstr[i]<='9')
		{
			//判断是不是新的数字串开始,如果是则记录新的数字串下标
			if(0 == i_temp_start)
			{
				i_temp_start = i;
			}
			//数字串长度加1
			i_temp_length++;
		}
		//如果不是数字
		else
		{
			//是否遍历到了数字串?
			if(0 != i_temp_length)//遍历到数字了
			{
				//如果i_temp_length大,那么将i_temp_length赋给i_max_length,将i_temp_start赋给i_max_start
				if(i_max_length < i_temp_length)
				{
					i_max_length = i_temp_length;
					i_max_start = i_temp_start;
				}
				//临时标记变量归零
				i_temp_start = 0;
				i_temp_length = 0;
			}
		}
		//如果到达字符串结尾,那么
		if(length-1 == i)
		{
			if(i_max_length < i_temp_length)
			{
				i_max_length = i_temp_length;
				i_max_start = i_temp_start;
			}
		}
		

	}
	//输出最长数字串
	for(int i=i_max_start;i<i_max_start+i_max_length;i++)
	{
		cout<<pstr[i];
	}
	cout<<","<<i_max_length<<endl;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值