Excel可以对一组纪录按任意指定列排序。现请编写程序实现类似功能。

输入格式:
输入的第一行包含两个正整数N(≤10​5​​ ) 和C,其中N是纪录的条数,C是指定排序的列号。之后有 N行,每行包含一条学生纪录。每条学生纪录由学号(6位数字,保证没有重复的学号)、姓名(不超过8位且不包含空格的字符串)、成绩([0, 100]内的整数)组成,相邻属性用1个空格隔开。

输出格式:
在N行中输出按要求排序后的结果,即:当C=1时,按学号递增排序;当C=2时,按姓名的非递减字典序排序;当C=3时,按成绩的非递减排序。当若干学生具有相同姓名或者相同成绩时,则按他们的学号递增排序。


题目思路:

1.这是一道常规的根据结构体某个元素排序需要用到sort函数。
2.注意到题目中说,如果姓名或者分数相同时,按照学号排序,这一点在定义cmp函数的时候需要体现出来。
3.题目中说姓名是不超过8个字符的字符串,实际上姓名数组只开到8是不够的(在这一点耗了挺久,后来我改成18就对了)。
4.最终输出的时候学号前面的0000的输出可能有的人会不懂怎么输出,需要用到printf("%.6d", num), 这里的%.6d意味着“最多输出6位,不够的用0补全
”。
5.关于字典序的输出需要使用到strcmp()函数,因为这个函数比较的原则就是按照字典序进行比较。
补充:字典序
对于两个字符串str1, str2, 存在正整数k,满足str[0, 1, 2, … k - 1] = str[0,1,2,…,k-1], 且str1[k] < str2[k] 则我们称str1的字典序小于str2的字典序。
例子: “aaa” 的字典序 小于"aab"的字典序。(如果还不明白随时call我也可以)
6.需要注意的点应该就这么多,希望这篇文章能帮到你。

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;struct Excel {int id;char name[8];int score;
};
bool cmp1(Excel a, Excel b)
{ return a.id < b.id;
};
bool cmp2(Excel a, Excel b)
{ if (strcmp(a.name, b.name) == 0)return a.id < b.id;else return strcmp(a.name, b.name) < 0;
};
bool cmp3(Excel a, Excel b)
{ if (a.score == b.score)return a.id < b.id;elsereturn a.score < b.score;
};
int main()
{int n, m;cin >> n >> m;Excel excel[1000];for (int i = 0; i < n; i++)cin >> excel[i].id >> excel[i].name >> excel[i].score;if (m == 1)sort(excel, excel + n, cmp1);else if (m == 2)sort(excel, excel + n, cmp2);else if (m == 3)sort(excel, excel + n, cmp3);for (int i = 0; i < n; i++)printf("%.6d %s %d\n", excel[i].id, excel[i].name, excel[i].score);return 0;
}

案例7-1 模拟EXCEL排序 (25 分)(根据结构体某一元素排序)相关推荐

  1. 7-10 节约有理 (25 分) c++结构体排序

    小明准备考研,要买一些书,虽然每个书店都有他想买的所有图书,但不同书店的不同书籍打的折扣可能各不相同,因此价格也可能各不相同.因为资金所限,小明想知道不同书店价格最便宜的图书各有多少本,以便节约资金. ...

  2. 7-1 模拟EXCEL排序 (25 分)

    7-1 模拟EXCEL排序 (25 分) Excel可以对一组纪录按任意指定列排序.现请编写程序实现类似功能. 输入格式: 输入的第一行包含两个正整数N(≤10 ​5 ​​ ) 和C,其中N是纪录的条 ...

  3. R7-9 模拟EXCEL排序 (25 分)

    R7-9 模拟EXCEL排序 (25 分) Excel可以对一组纪录按任意指定列排序.现请编写程序实现类似功能. 输入格式: 输入的第一行包含两个正整数N(≤105) 和C,其中N是纪录的条数,C是指 ...

  4. 7-2 模拟EXCEL排序 (25分) PTA

    7-2 模拟EXCEL排序 (25分) Excel可以对一组纪录按任意指定列排序.现请编写程序实现类似功能. 输入格式: 输入的第一行包含两个正整数N(≤10 ​5 ​​ ) 和C,其中N是纪录的条数 ...

  5. 7-47 对称排序 (25 分)

    7-47 对称排序 (25 分) 你供职于由一群丑星作为台柱子的信天翁马戏团.你刚完成了一个程序编写,它按明星们姓名字符串的长度非降序(即当前姓名的长度至少与前一个姓名长度一样)顺序输出他们的名单.然 ...

  6. 7-210 英文单词排序 (25 分)

    7-210 英文单词排序 (25 分) 本题要求编写程序,输入若干英文单词,对这些单词按长度从小到大排序后输出.如果长度相同,按照输入的顺序不变. 输入格式: 输入为若干英文单词,每行一个,以#作为输 ...

  7. 7-207 排序 (25 分)

    7-207 排序 (25 分) 给定N个(长整型范围内的)整数,要求输出从小到大排序后的结果. 本题旨在测试各种不同的排序算法在各种数据情况下的表现.各组测试数据特点如下: 数据1:只有1个元素: 数 ...

  8. 7-2 英文单词排序 (25分)

    7-2 英文单词排序 (25分) 本题要求编写程序,输入若干英文单词,对这些单词按长度从小到大排序后输出.如果长度相同,按照输入的顺序不变. 输入格式: 输入为若干英文单词,每行一个,以#作为输入结束 ...

  9. 7-2 英文单词排序 (25 分)

    7-2 英文单词排序 (25 分) 本题要求编写程序,输入若干英文单词,对这些单词按长度从小到大排序后输出.如果长度相同,按照输入的顺序不变. 输入格式: 输入为若干英文单词,每行一个,以#作为输入结 ...

  10. 练习-编写函数对结构体类型数据进行排序

    第1关:编写函数对结构体类型数据进行排序 任务描述 本关任务:定义学生结构体数据类型,从键盘输入一批学生的信息,编写函数将这批学生按姓名排序. 相关知识 结构体变量之间整体是不可以比较大小的,结构体变 ...

最新文章

  1. 3.4 改进集束搜索-深度学习第五课《序列模型》-Stanford吴恩达教授
  2. php sockent通信
  3. 操作系统 课堂练习题03【20道 经典题目】
  4. oracle sql-1,Oracle – Oracle SQL(1)
  5. pthread_cleanup_push()/pthread_cleanup_pop()
  6. boot spring 怎么执行hql_Intellij如何使用Spring Boot正确配置hql。现在我得到持久性QL查询已进行错误检查...
  7. 【Salient Object Detection】显著性物体检测资料汇总
  8. leetcode力扣406. 根据身高重建队列
  9. 移动硬盘计算机管理无法显示,移动硬盘不显示怎么办
  10. android java标准时间_关于android:Java中格林尼治标准时间的毫秒数
  11. html编写一个飞机游戏,利用HTML5 Canvas如何制作一个简单的打飞机游戏
  12. ESP8266制作创意时钟(DS1302+TM1637)
  13. foxmail 163企业邮箱配置
  14. Kafka 集群扩容、分区重新分配、SparkStreaming自适应上游kafka topic partition数目变化
  15. C语言编程 | 转义字符
  16. 批量提取文件创建时间_文件列表提取软件的使用
  17. powershell 发送邮件
  18. git——04 远程仓库/标签/别名
  19. 最大公因数等于 K 的子数组数目求解全过程
  20. 嵌入式的可就业方向有哪些?

热门文章

  1. 基于java的网络抓包方法
  2. 异步是javascript的精髓
  3. jquery ajax 向spring MVC controller中传值并接受及解析返回值
  4. 一步步编写avalon组件03:切换卡组件
  5. UIButton 文字图片排列
  6. 小弟浅谈asp.net页面生成周期---上
  7. H3C的静态路由、Track与NQA联动配置举例
  8. MX记录有什么用?为什么今天的电子邮件系统是这样的?
  9. 【学习笔记:计算几何基础3】 Convex Hull
  10. java基础47 装饰着模式设计