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

C++如何读取文本文件中的姓氏与名字并按姓氏排序展示

问题分析

你的现有代码存在两个核心问题:

  • 读取逻辑只每次读取单个字符串,没有同时读取姓氏和名字,无法保留完整姓名信息
  • 比较逻辑仅基于读取到的单个字符串做排序判断,没有按姓氏维度做比较
假设前提

我们先约定你的RandomNames.txt存储格式为名 姓空格分隔,每行/连续两个字符串对应一个人的完整姓名,例如小明 王、Tom Smith都是合法的存储格式。如果你的文件是姓在前名在后,调整代码里的读取顺序即可。

修改方案

核心修改点

  1. 每次读取操作同时读取名和姓两个字符串,绑定对应关系
  2. 比较时使用姓氏作为判断依据,匹配按姓氏排序的需求
  3. 存储最小/最大排序位的完整姓名,输出时同时展示名和姓

修改后完整代码

#include <iostream>
#include <string>
#include <fstream>

using namespace std;

int main()
{
    ifstream inputFile;
    // 分别存储当前读取的名、姓
    string firstname, lastname;
    // 存储排序后第一位的名、姓,最后一位的名、姓
    string first_person_firstname, first_person_lastname;
    string last_person_firstname, last_person_lastname;

    inputFile.open("RandomNames.txt");

    if (inputFile)
    {
        // 先读取第一条完整姓名初始化首尾记录
        inputFile >> firstname >> lastname;
        first_person_firstname = last_person_firstname = firstname;
        first_person_lastname = last_person_lastname = lastname;

        // 循环读取后续所有完整姓名
        while (inputFile >> firstname >> lastname)
        {
            // 按姓氏比较,比当前第一位更小则更新第一位记录
            if (lastname < first_person_lastname)
            {
                first_person_firstname = firstname;
                first_person_lastname = lastname;
            }
            // 按姓氏比较,比当前最后一位更大则更新最后一位记录
            else if (lastname > last_person_lastname)
            {
                last_person_firstname = firstname;
                last_person_lastname = lastname;
            }
        }

        inputFile.close();
    }
    else
    {
        cout << "文件打开失败,请检查文件路径是否正确" << endl;
        return 1;
    }

    // 输出完整姓名,格式可自行调整
    cout << "First student in line = " << first_person_firstname << " " << first_person_lastname << endl;
    cout << "Last student in line  = " << last_person_firstname << " " << last_person_lastname << endl;

    return 0;
}
扩展说明

如果你需要输出所有按姓氏排序的学生名单,而不仅仅是首尾两位,可以将所有姓名存入vector<pair<string, pair<string, string>>>结构(第一个元素存姓氏作为排序键,第二个pair存完整姓名),调用sort函数排序后遍历输出即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 10:48:02