文章

60

粉丝

361

获赞

43

访问

524.4k

头像
还是sort
P1227 北京大学机考题
发布于2021年1月12日 22:27
阅读数 13.3k

定义一个类

将日志行拆分为 名称 时间 运行时间,然后进行排序

#include <bits/stdc++.h>
using namespace std;
struct T
{
	string name;
	string time;
	string run;
}t[10000];
bool compare(T t1,T t2)
{
	if(t1.run ==t2.run )
		return t1.time<t2.time;
	else
		return t1.run<t2.run;
}

int main()
{
	string s;
	int cnt=0;
	while(getline(cin,s))
	{
		if(s=="") break;
		
		int len=s.size();
		int i=0,j=0;
		for(i=len-1;i>=1;i--)
		{
			if(s[i]!=' '&&s[i-1]==' ')
			{
				t[cnt].run=s.substr(i,len-i);//获取运行时间
				break;
			}
		}
		for(j=0;j<len-1;j++)
		{
			if(s[j]==' '&&s[j+1]!=' ')
			{
				t[cnt].name =s.substr(0,j+1);
				t[cnt].time=s.substr(j+1,i-j-1);
				break;
			}
		}
		cnt++;//统计个数
	}
	sort(t,t+cnt,compare);
	for (int k=0;k<cnt;k++)
	{
		cout<<t[k].name <<t[k].time <<t[k].run <<endl;
	}
	//system("pause");
	return 0;
}

 

登录查看完整内容


登录后发布评论

2 条评论
vanffer
2024年5月31日 14:35

如果输入头部有空格,下面这段代码有问题吧

for(j=0;j<len-1;j++)
		{
			if(s[j]==' '&&s[j+1]!=' ')
			{
				t[cnt].name =s.substr(0,j+1);
				t[cnt].time=s.substr(j+1,i-j-1);
				break;
			}
		}
}

 

赞(0)
gallopzhang
2022年8月12日 17:06

compare函数应该改一下,否则只能通过75%,如下:

bool compare(T t1,T t2)
{
    if(t1.run ==t2.run )
        return t1.time<t2.time;
    else if(t1.run.size() != t2.run.size())
        return t1.run.size() < t2.run.size();
    else
        return t1.run<t2.run;
}

赞(2)