HUST - 1016 幼儿园小朋友们的难题(水题)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_45458915/article/details/102718184

幼儿园的小朋友们一直在研究一个问题—— 如何在一个长长的句子中找到最大的那个非负整数(不存在负数)。你很不幸的被他们拖住了,又很不幸的被他们叫去执行这个任务,你非常得不爽! 因为你觉得这么简单的问题简直侮辱了你的智商,所以你决定写一个程序来代劳。

输入

输入有多组数据。每组输入一个句子(一定包含数字字符,可能包含空格),长度小于256,占一行

输出

输出对应有多行,每行输出所找出的最大的那个非负整数

样例输入 

&&12345aBsdDkjie64skjd5lk
3*2&&0%%%00B58CD000000b
a000b0000000c000

样例输出 

12345
58
0

题目大意:给出许多字符串,问每个字符串中出现的最大的非负整数是多少

题目分析:本来是在刷水题凑出题数的,结果碰到了这个题,涉及到了一点知识盲区,加上一开始真的不知道该怎么实现比较合适,做出这个题后还算是有点小收获的,就写个博客记录一下吧(也可能是我太水了。。)

首先需要了解的前置知识是getline函数的返回值,和gets函数相似,当遇到EOF时返回一个输入无效的值,即能跳出while循环,遇到回车时会进入循环,因为string类若想读取一整行只能用getline,之前还没遇到过相似的题目,所以算是补充了一下知识点吧

再者就是如何比较字符串中出现数字的大小呢,一开始我是想想写个函数,将其转换为数字然后比较的,但想了一下,发现给出的字符串长达256,连续的数字稍微一长,连longlong都爆掉了,所以肯定是不可行的,去网上看了题解后才知道,原来我们可以直接比较连续数字的长度,长度较长的肯定要比长度较短的要大,毕竟数位摆在那里嘛,若长度相等的话,也可以直接用string类的比较大小来判断,因为string类对于字符的比较是按照字典序排序的,从前往后比较,也正好满足了这个题目的要求,所以我们可以直接用string类储存答案,记得初始化mmax为“0”,并且当遇到非0的数字时再开始记录,这样可以避免出现前导0的情况,以上应该就这么多了,简单实现一下就好了

代码:

#include<iostream>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<climits>
#include<cmath>
#include<cctype>
#include<stack>
#include<queue>
#include<list>
#include<vector>
#include<set>
#include<map>
#include<sstream> 
#include<deque>
#include<unordered_map>
#define Pi acos(-1.0)
using namespace std;

typedef long long LL;

const int inf=0x3f3f3f3f;

const int N=1e4+100;

int main()
{
//  freopen("input.txt","r",stdin);
	string s;
	while(getline(cin,s))
	{
		string mmax="0";
		for(int i=0;i<s.size();i++)
		{
			if(isdigit(s[i])&&s[i]!='0')
			{
				string temp;
				while(isdigit(s[i]))
				{
					temp+=s[i++];
				}
				if(temp.size()>mmax.size()||(temp.size()==mmax.size()&&temp>mmax))
					mmax=temp;
			}
		}
		cout<<mmax<<endl;
	}
    
    
    
    
    
    
    
    
    
    

    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_45458915/article/details/102718184