C++中读取文本文件内容到结构体数组中并排序
作者:野牛程序员:2023-06-14 13:42:26 C++阅读 3135
以下是一个示例,展示了如何在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

