1. #include<iostream>
    2. #include<algorithm>
    3. #include<stdlib.h>
    4. #include<string.h>
    5. using namespace std;
    6. struct stu {
    7. char name[20];
    8. char id[20];
    9. int grade;
    10. int rank;
    11. }arr[100];
    12. int main() {
    13. int n; int j = 0; char patter[20]; char temp[5];
    14. cin >> n; cin >> patter;
    15. for (int i = 0; i < n; i++) { // 结构的输入
    16. cin >> arr[i].name; cin >> arr[i].id; cin >> temp; arr[i].grade =atoi(temp);
    17. }
    18. for (int i = 0; i < n; i++) { // 结构的稳定降序排序——buble sort
    19. for (j = 1; j < n - i; j++) {
    20. if (arr[j - 1].grade < arr[j].grade) swap(arr[j - 1], arr[j]);
    21. }
    22. }
    23. int rank = 1; arr[1].rank = 1; int count = 1;// 真实排名
    24. for (j = 1; j < n; j++) { // 排名编号 相同排名一致,但仍按人数计算的排名,不是按编号递减的排名
    25. if (arr[j].grade != arr[j - 1].grade) { rank++; count++; arr[j].rank = count; }
    26. else {
    27. arr[j].rank = rank; count++;
    28. }
    29. }
    30. int num = atoi(patter);
    31. if(isalpha(patter[0])) { // 人名查找
    32. for (j = 0; j < n; j++) {
    33. if (strstr(arr[j].name, patter) != NULL) {// 注意每一项之间是否打印了空格
    34. if (arr[j].grade == 0) // 成绩的缺考项输出转化
    35. cout << arr[j].name << " " << arr[j].id << " n/a n/a" << endl;
    36. else
    37. cout << arr[j].name << " " << arr[j].id << " " << arr[j].grade << " " << arr[j].rank << endl;
    38. }
    39. }
    40. }
    41. else if ( num<= 100) { // 成绩查找
    42. for (j = 0; j < n; j++) {
    43. if (arr[j].grade == num)
    44. {
    45. if (arr[j].grade == 0)
    46. cout << arr[j].name << " " << arr[j].id << " n/a n/a" << endl;
    47. else
    48. cout << arr[j].name << " " << arr[j].id << " " << arr[j].grade << " " << arr[j].rank << endl;
    49. }
    50. }
    51. }
    52. else {// id查找
    53. for (j = 0; j < n; j++) {
    54. if (strstr(arr[j].id, patter) != NULL)
    55. {
    56. if (arr[j].grade == 0)
    57. cout << arr[j].name <<" " << arr[j].id << " n/a n/a" << endl;
    58. else
    59. cout << arr[j].name <<" " << arr[j].id <<" " << arr[j].grade << " " << arr[j].rank << endl;
    60. }
    61. }
    62. }
    63. return 0;
    64. }