当前位置:首页 C++ > 正文

C++中读取文本文件内容到结构体数组中并排序

作者:野牛程序员:2023-06-14 13:42:26 C++阅读 2900

以下是一个示例,展示了如何在C++中读取文本文件的内容到一个结构体数组中,并按照指定的条件对其进行排序。

假设你有一个名为"data.txt"的文本文件,其中包含有关人员的信息,每行表示一个人的数据,格式为"姓名 年龄"。我们将读取这个文件,并将数据存储在一个名为"Person"的结构体中,该结构体有两个成员变量:"name"和"age"。最后,我们将根据年龄对Person结构体数组进行排序。

#include <iostream>
#include <fstream>
#include <cstring>
#include <vector>
#include <algorithm>

struct Person {
    char name[50];
    int age;
};

bool compareByAge(const Person& a, const Person& b) {
    return a.age < b.age;
}

int main() {
    const char* filename = "data.txt";
    std::ifstream file1(filename);

    if (!file1) {
        std::cerr << "无法打开文件:" << filename << std::endl;
        return 1;
    }

    std::vector<Person> people;

    char name[50];
    int age;
    while (file1 >> name >> age) {
        Person person;
        std::strcpy(person.name, name);
        person.age = age;
        people.push_back(person);
    }

    file1.close();

    std::sort(people.begin(), people.end(), compareByAge);

    // 打印排序后的人员信息
    for (std::vector<Person>::const_iterator it = people.begin(); it != people.end(); ++it) {
        const Person& person = *it;
        std::cout << "姓名:" << person.name << ",年龄:" << person.age << std::endl;
    }

    return 0;
}

在这段代码中,我们使用std::ifstream打开文件,并检查是否打开失败。然后,我们使用提取运算符(>>)逐行读取文件。将姓名读入name变量,将年龄读入age变量。我们使用这些值创建一个新的Person结构体,并将其添加到people向量中。

最后,我们使用自定义比较函数compareByAge对向量进行排序,基于年龄进行比较。

排序后,我们遍历排序后的向量,并打印每个人的姓名和年龄。

记得用实际的路径和文件名替换"data.txt"。同时,确保包含必要的头文件(<iostream><fstream><string><vector><algorithm>)以及using namespace std;,如果你还没有包含的话。

例如,你可以将以下内容复制到"data.txt"文件中:

John 25
Emily 30
Michael 20
Sophia 28


野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击