如何用C++读取文本文件中学生信息并存储为Student对象的vector
实现思路
- 第一步:定义符合字段要求的Student类,包含id、名、姓、院系、GPA五个成员属性,添加构造函数方便初始化
- 第二步:修正原有vector的类型,将
std::vector<std::string>改为std::vector<Student>,用于存储所有学生实例 - 第三步:优化读取逻辑:逐行读取文件后,直接从每行的字符串流中按顺序读取5个字段,依次赋值给临时Student对象的对应属性,读完一行就将该对象插入vector中,不需要嵌套循环读取单个单词
- 第四步:补充异常判断,比如文件打开失败提示、每行字段读取失败的兼容处理,避免程序崩溃
完整可运行代码
#include <iostream> #include <fstream> #include <sstream> #include <vector> #include <string> // 定义Student类 class Student { public: std::string id; std::string fname; std::string lname; std::string department; double gpa; // 构造函数 Student() = default; Student(std::string i, std::string fn, std::string ln, std::string dept, double g) : id(i), fname(fn), lname(ln), department(dept), gpa(g) {} }; int main() { std::vector<Student> students; // 存储Student对象的vector std::ifstream inputFile("enroll_assg.txt"); std::string line; if(inputFile.is_open()){ while(std::getline(inputFile, line)){ std::istringstream iss(line); // 临时变量存储当前行的5个字段 std::string id, fname, lname, dept; double gpa; // 按顺序读取5个字段,读取成功才存入vector if(iss >> id >> fname >> lname >> dept >> gpa) { students.emplace_back(id, fname, lname, dept, gpa); // 取消下方注释可验证读取结果 // std::cout << id << " " << fname << " " << lname << " " << dept << " " << gpa << std::endl; } } inputFile.close(); std::cout << "读取完成,共" << students.size() << "名学生信息" << std::endl; } else { std::cerr << "文件打开失败,请检查文件路径是否正确" << std::endl; } // 后续直接操作students向量即可使用所有学生数据 return 0; }
原有代码问题说明
- 原来的vector存储类型错误,声明为存储string的容器无法存储Student对象
- 嵌套了两层读取单词的循环,导致每个字段单独输出,不符合按行分组读取的需求
- 用new创建的Student对象没有被正确使用,也没有释放会造成内存泄漏,直接用栈对象或者emplace_back构造更安全
内容的提问来源于stack exchange,提问作者codingisfun543
相关产品推荐
相关产品推荐

