总时间限制:
1000ms
内存限制:
65536kB
描述
给定一个字符串,请将其中的所有数字串提取,并将每个数字串作为整数看待(假设可以用int 表示),按从小到大顺序输出结果,输出的整数之间以逗号间隔。如果没有数字,则输出0;例如:*1234.345#6781ad9jk81-11101?aght88ir09kp,其中的整数包括:1234,345,6781,9,81,11101,88,9,从小到大排序后,应该输出:
9,9,81,88,345,1234,6781,11101
输入
在一行内输入一串符号,长度不大于300。输入数据保证提取的整数不超过109。
输出
从小到大排序的整数序列,如果没有数字,则输出0;
样例输入
*1234.345#6781ad9jk81-11101?aght88ir09kp
样例输出
9,9,81,88,345,1234,6781,11101
这个题目的话,用小根推可以和轻松的做出来,就是标准的小根堆的模板
#include<bits/stdc++.h>
using namespace std;
char s[310];
int main()
{
gets(s);
priority_queue<int,vector<int>,greater<int>> heap;
for(int i=0;i<strlen(s);i++)
{
if(s[i]<'0'||s[i]>'9')
continue;
int t=0;
while(s[i]>='0'&&s[i]<='9') //获取每个数
{
t=t*10+s[i]-'0';
i++;
}
heap.push(t); //插入到小根堆
// cout<<t<<endl;
}
if(heap.size()==0)
cout<<0;
else
{
while(heap.size()>1)//输入前n-1个元素
{
cout<<heap.top()<<',';
heap.pop();
}
cout<<heap.top(); //输出最后一个元素
}
}