写在前面:
问卷调查课日常摸鱼,,
这道题感觉思路很简单,就是具体实现时出现了意料之外的问题。
比如用scanf或cin输入若干个个字符串时,如果输入了空格,接下来的内容都是下一个字符串的了。
所以本以为这道题可以水过,结果还是花了较长时间w,,
题目:
2990. 文献排序
题面
单点时限: 2.0 sec
内存限制: 256 MB
现在你的导师给你了一个待排序的参考文献列表,要你排好序给他。
文献列表中每一条文献记录只占一行。排序的规则和string类型字符串的比较规则一致(在排序时如果该字符串中包含大写字母,则当作小写字母处理,保证没有相同大小的字符串,但是输出结果不能改变任一字符串),按升序排列。
输入格式
第 1 行:一个整数 T (1≤T≤10) 为问题数。
对于每组测试数据:每组第一行包括一个整数n,(1≤n≤200),接下来有n行,每行包括一行文献记录,文献记录的长度s (1≤s≤200)。
输出格式
对每组输入,输出一行问题的编号(0开始编号,格式:case #0: 等)然后输出排好序的文献记录。
样例
input
3
3
abc hello!
Abc hellz!
bbc hello!
2
Acc hello!
Abc hellz!
3
Abc Hi!
abc Hallo!
aAc hello!
output
case #0:
abc hello!
Abc hellz!
bbc hello!
case #1:
Abc hellz!
Acc hello!
case #2:
aAc hello!
abc Hallo!
Abc Hi!
思路:
- 输入n个字符串(可以用二维数组来存储)
- 用qsort为这些字符串排序(此题注意cmp函数)
- 使用方法:参考博客:字符串数组qsort排序
- 此题cmp逻辑:
因为比较时不区分大小写,但输出时是按原有大小写输出,
所以,在cmp函数中,比较的不是原字符串,而是两个临时字符串,内容是“小写化”了的原串。
其他:
通过这道题,了解到了gets和scanf、cin的一个挺重要的区别——
- gets:遇到回车停止读入。
- scanf和cin:遇到回车、空格、tab停止读入。
所以如果要输入的字符串中包含空格或tab,这三者中只能选择gets。
参考博客:scanf、gets、getchar、cin、cin.get、cin.getline、getline总结
代码:
头文件:
#include <stdio.h>
#include <string.h>
#include