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
