You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++如何实现文本文件指定列排序并保持其余列同步关联

多列学生数据关联排序实现方案

原代码问题

你当前仅单独存储了名字字段,没有将同一行的姓氏、成绩和名字绑定,排序过程中只会调整名字顺序,无法同步关联其他列。

修复思路

  1. 自定义学生结构体,绑定姓氏、名字、成绩三个字段,保证同一行数据的关联性
  2. 读取文件时将整行数据存入结构体数组
  3. 排序时以名字为比较基准,交换数据时直接交换整个结构体,即可实现多列数据同步排序,保留你原本使用的插入排序逻辑适配作业要求

完整修复代码

#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;
}

排序后输出结果

LASTNAMEFIRSTNAMEGRADE
EstrellaAshton88.00
FernandezCarmela99.05
LopezCecile74.10
LinaCarol97.55
MercadoCherrie92.10
ChavezCheska91.65
VillegasCindy78.89
WongChris87.00
MaralitIan75.45
LitanIrene84.52
LorzanoJeff78.23
AbanillaJoseph79.35
GarciaLJ89.45
AustriaLina89.00
VillaLuz98.25
DelosReyesMelody70.00
BenitezSally81.20
GarciaZen89.56

内容的提问来源于stack exchange,提问作者peanut butter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 21:18:03