这道题让我受益匪浅(日了狗了)啊~~
这是一道模拟的题,老实说模拟的题很考细节额,我用的vector来模拟优先队列,但也可以使用直接用stl里的优先队列来模拟它~~
1.cin或者getline可以直接返回EOF
2.cin>>string类不吃空格
getline(cin,string);才吃空格
3 substr剪切字符串的用法
还有做这题的时候一开始,优先级我用的字符串的字典序直接比的大小,呵呵呵呵呵
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
#include<cstring>
#include<string>
using namespace std;
const int maxn=100;
char order[maxn];
vector<string> priority_queue1;
int trans(string sb)
{
int heye=0;
for(int i=0;i<sb.length();i++)
heye=(sb[i]-'0')+heye*10;
return heye;
}
int main()
{
string s;
while(getline(cin,s))
{
if(s[0]=='P')
{
priority_queue1.push_back(s);
}
else if(s[0]=='G')
{
if(priority_queue1.empty()!=1)
{
string c;
int pos;
string priority_value="9999999";
for(int i=0; i<priority_queue1.size(); i++) //遍历找到当前最小(高)优先级
{
int j;
for(j=priority_queue1[i].length()-1; j>=0; j--)
if(priority_queue1[i][j]==' ') break;
string a;
a=priority_queue1[i].substr(j+1,priority_queue1[i].length()-j-1);
if(trans(a)<trans(priority_value)) {priority_value=a;c=priority_queue1[i];pos=i;}//记录当前位置
}
int j;
for( j=c.length()-1; j>=0; j--)
if(c[j]==' ') break;
int n=j;
cout<<c.substr(4,n-4)<<endl;
for( pos; pos<priority_queue1.size()-1; pos++)
{
priority_queue1[pos]= priority_queue1[pos+1];
}
priority_queue1.resize(pos);
}
else if(priority_queue1.empty()==1) printf("EMPTY QUEUE!\n");
}
}
return 0;
}