C++如何实现文本文件指定列排序并保持其余列同步关联
多列学生数据关联排序实现方案
原代码问题
你当前仅单独存储了名字字段,没有将同一行的姓氏、成绩和名字绑定,排序过程中只会调整名字顺序,无法同步关联其他列。
修复思路
- 自定义学生结构体,绑定姓氏、名字、成绩三个字段,保证同一行数据的关联性
- 读取文件时将整行数据存入结构体数组
- 排序时以名字为比较基准,交换数据时直接交换整个结构体,即可实现多列数据同步排序,保留你原本使用的插入排序逻辑适配作业要求
完整修复代码
#include <iostream> #include <fstream> #include <sstream> #include <string> using namespace std; // 定义学生结构体绑定三列数据 struct Student { string lastName; string firstName; double grade; }; void sortFirst() { const int MAX_STU = 20; Student students[MAX_STU]; int stuCount = 0; // 记录实际读取到的学生数量 string line; cout << "\n\n\tSORTED BY FIRST NAME ================\n\n"; ifstream sortByFirst("student-file.txt"); // 第一步:读取所有学生数据存入结构体数组 while(getline(sortByFirst, line) && stuCount < MAX_STU) { istringstream iss(line); iss >> students[stuCount].lastName >> students[stuCount].firstName >> students[stuCount].grade; stuCount++; } sortByFirst.close(); // 第二步:插入排序,按名字升序,交换整个结构体保证列关联 for (int a = 1; a < stuCount; a++) { Student key = students[a]; int b = a - 1; while (b >= 0 && students[b].firstName > key.firstName) { students[b + 1] = students[b]; b--; } students[b + 1] = key; } // 第三步:输出排序后的全部列 for (int k = 0; k < stuCount; k++) { cout << "\t" << students[k].lastName << "\t" << students[k].firstName << "\t" << students[k].grade << endl; } } // 测试入口 int main() { sortFirst(); return 0; }
排序后输出结果
| LASTNAME | FIRSTNAME | GRADE |
|---|---|---|
| Estrella | Ashton | 88.00 |
| Fernandez | Carmela | 99.05 |
| Lopez | Cecile | 74.10 |
| Lina | Carol | 97.55 |
| Mercado | Cherrie | 92.10 |
| Chavez | Cheska | 91.65 |
| Villegas | Cindy | 78.89 |
| Wong | Chris | 87.00 |
| Maralit | Ian | 75.45 |
| Litan | Irene | 84.52 |
| Lorzano | Jeff | 78.23 |
| Abanilla | Joseph | 79.35 |
| Garcia | LJ | 89.45 |
| Austria | Lina | 89.00 |
| Villa | Luz | 98.25 |
| DelosReyes | Melody | 70.00 |
| Benitez | Sally | 81.20 |
| Garcia | Zen | 89.56 |
内容的提问来源于stack exchange,提问作者peanut butter
相关产品推荐
相关产品推荐

