前言
hello大家好。
闲着没事儿出来冒个泡,发一个题解。
这是一道作业题,我是该讲思路呢,还是讲代码呢?
算了两个都讲吧……
题目
昨天,360非法截取了用户的QQ聊天信息……但是由于QQ的隐私保护措施,聊天记录的顺序被打乱了。360想请你帮他将聊天记录按发送信息的时间升序排列,并输出所有给定的账号发送的信息内容,每行一条。
聊天记录的格式为:
YYYY-MM-DD hh:mm:ss <user> <message>
其中:
YYYY-MM-DD hh:mm:ss为发送信息的时间。
<user> 为发送信息的账号,且只包含大小写英文字母及标点符号;
<message> 为信息的内容。
输入格式:
第一行为一个只包含大小写英文字母及标点符号的字符串,为给定的账号。(日期、时间、姓名和消息之间用空格隔开) 第二行一直到文件结束,每行包含一条聊天记录,格式如题目描述。
输出格式:
有若干行,为按发送时间升序排列的所有给定账号发送的信息内容。
限制:
行数小于1000,字符串长度小于500
样例 1 :
输入: Ahalei 2010-11-02 22:01:55 Ahalei 886. 2010-08-03 09:10:45 BigL What? 2010-11-02 21:45:09 Ahalei How are you? 2010-11-02 21:44:32 PGDN I am OK! 2010-11-02 21:45:19 Ahalei what do you want to do? 2009-10-25 06:00:35 PGDN O my God!
输出: How are you? what do you want to do? 886.
思路
很简单的好不好,结构体加sort秒破。
先输入,再看时间先后,最后输出所有信息。
伪代码:
#include 万能头
using namespace std;
struct 结构体{
string 信息;
}数组;
cmp函数;
string n;
主函数()
{
输入n;
无限循环输入数组;
判断时间先后;
输出;
return 0;
}
相信有些童鞋看到这里已经会做了,那就别看代码了吧(呵呵)。
代码
#include <bits/stdc++.h>
#include <cstdio>
using namespace std;
struct node{
string y,t,user,mes;
}a[1005];
string n;
bool cmp(node p,node q){
if(p.y!=q.y)return p.y<q.y;
return p.t<q.t;
}
int main()
{
cin>>n;
int cnt=1;
while(cin>>a[cnt].y){
cin>>a[cnt].t>>a[cnt].user;
getline(cin,a[cnt].mes);
cnt++;
}
sort(a+1,a+cnt,cmp);
for(int i=1;i<cnt;i++){
if(a[i].user==n)
cout<<a[i].mes<<endl;
}
return 0;
}