您的位置:首页 > 其它

EOJ(排序)——97. 邮件地址排序

2019-01-09 10:19 363 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_29978597/article/details/86134510

97. 邮件地址排序

现接收到一大批电子邮件,邮件地址格式为:用户名@主机域名,要求把这些电子邮件地址做主机域名的字典序升序排序,如果主机域名相同,则做用户名的字典序降序排序。

输入

第一行输入一个正整数 n,表示共有 n 个电子邮件地址需要排序。
接下来 n 行,每行输入一个电子邮件地址(保证所有电子邮件地址的长度总和不超过 106)。
对于 50% 的数据,保证 n⩽100,|si|⩽100。
用户名只包含字母数字和下划线,主机域名只包含字母数字和点。

输出

按排序后的结果输出 n 行,每行一个电子邮件地址。

input

8
23485@qq.com
rieruer@163.com
39489384@qq.com
eruie@ecnu.edu.cn
rtff@163.com
84934804@qq.com
fdll@ecnu.edu.cn
598695@qq.com

output

rtff@163.com
rieruer@163.com
fdll@ecnu.edu.cn
eruie@ecnu.edu.cn
84934804@qq.com
598695@qq.com
39489384@qq.com
23485@qq.com

题目大意:

给出一些邮件地址,按域名和用户名排序。

题目解析:

用结构体存储数据,在读取数据时候用strtok函数分离用户名和主机域名,保存用户名和主机域名,然后利用qsort函数排序。(目测要用hash表来处理,加快查询速度,不过还没刷到那,下面代码只能过一半样例)

具体代码:

#include<iostream>
#include<stdlib.h>
#include<string.h>
using namespace std;

struct address{
char username[110];
char adminname[110];
}arr[500];

int cmp(const void* a,const void* b){
address add1=*(address*)a,add2=*(address*)b;
if(strcmp(add1.adminname,add2.adminname)!=0)
return strcmp(add1.adminname,add2.adminname);
else
return strcmp(add2.username,add1.username);
}

int main()
{
int n;
cin>>n;
getchar();
for(int i=0;i<n;i++){
char s[110];
cin.getline(s,110);
strcpy(arr[i].username,strtok(s, "@"));
strcpy(arr[i].adminname,strtok(NULL, "@"));
}
qsort(arr,n,sizeof(arr[0]),cmp);
for(int i=0;i<n;i++){
printf("%s@%s\n",arr[i].username,arr[i].adminname);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: