C++ 笔试练习笔记【1】:字符串中找出连续最长的数字串 OR59

请添加图片描述


注:本次练习题目出自牛客网

OR59 字符串中找出连续最长的数字串

在这里插入图片描述

题目思路分析

首先想到的是用双指针模拟,进行检索比较输出
以示例1为例:

1.首先i遍历str直到遍历到数字(如①所示)
在这里插入图片描述

2.将j的位置和i一样,之后j进行遍历直到字母,这时就找到了第一个数字串(如②所示)
在这里插入图片描述

3.将i和j同步再重复1. 2. 进行遍历(如③ ④ ⑤)由于第二次len=3<第一次len=5,题中要求最长数字串所以不更新len
在这里插入图片描述

4.之后(如⑥所示)长度比我们记录的长所以更新我们记录的数字串的起始位置和数字串长度
在这里插入图片描述

5.直到i走到字符串的结尾

实现代码

#include <iostream>
#include <string>
using namespace std;

int main()
{
	string str;
	cin >> str;

	int begin = 0, len = 0;
	for (int i = 0; i < str.size(); i++)
	{
		if (str[i] >= '0' && str[i] <= '9')//当i遍历时遇到数字时进入判断
		{
			int j = i;
			while (j < str.size() && str[j] >= '0'&& str[j] <= '9') j++;//进行遍历数字串
			if (j - i>len)//判断长度知否是最长,进行判断更新
			{
				begin = i;
				len = j - i;
			}
			i = j;//将i更新到j以便继续比遍历
		}
	}

	cout << str.substr(begin, len) << endl;
	return 0;
}

那么恭喜你
在这里插入图片描述
点赞,收藏,关注

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值