c++ - 从文件 c++ 创建一个字符串向量
问题描述
我正在尝试从 .txt 文件中输入三条信息。
第一列是课程标记。第二列是课程代码。第三列是课程名称。
我想将这些存储为 3 个字符串向量。
在这里使用 stringstream 会是一个不错的选择吗?也许是迭代器?
.txt 文件就像
65.6 10071 Mathematics 1
66.7 10101 Dynamics
60.0 10121 Quantum Physics and Relativity
66.9 10191 Introduction to Astrophysics and Cosmology
... ... ...
到目前为止我的代码是
#include<iostream>
#include<iomanip>
#include<fstream>
#include<cmath>
#include<algorithm>
#include<string>
#include<iterator>
#include<sstream>
#include<vector>
//Main Function
int main()
{
//Define variables
std::string course_mark, course_code, course_name;
std::vector<std::string> course_mark_vector;
std::vector<std::string> course_code_vector;
std::vector<std::string> course_name_vector;
std::string data_file[100];
// Ask user to enter filename
std::cout<<"Enter data filename: ";
std::cin>>data_file;
int i{0};
// Open file and check if successful
std::fstream course_stream(data_file);
if(course_stream.is_open()) {
while (!course_stream.eof()) //while the end of file is NOT reached
{
//I have 2
getline(course_stream, course_mark, ' ');
course_mark_vector.push_back(course_mark);
getline(course_stream, course_code, ' ');
course_code_vector.push_back(course_code);
getline(course_stream, course_name, '\n');
course_name_vector.push_back(course_name);
i += 1; //increment number of lines
}
course_stream.close(); //closing the file
std::cout << "Number of entries: " << i-1 << std::endl;
}
else{
std::cout << "Unable to open file. Please run again" << std::endl;
return 1;
}
任何帮助将不胜感激
解决方案
在这里使用 stringstream 会是一个不错的选择吗?
是的。
也许是迭代器?
在这种情况下不需要迭代器。
尝试这个:
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <vector>
#include <iomanip>
//Main Function
int main()
{
//Define variables
std::string course_mark, course_code, course_name, data_file, line;
std::vector<std::string> course_mark_vector, course_code_vector, course_name_vector;
int i = 0;
// Ask user to enter filename
std::cout << "Enter data filename: ";
std::cin >> data_file;
// Open file and check if successful
std::ifstream course_stream(data_file);
if (!course_stream.is_open())
{
std::cout << "Unable to open file. Please run again" << std::endl;
return 1;
}
while (std::getline(course_stream, line)) //while the end of file is NOT reached
{
std::istringstream iss(line);
iss >> course_mark;
course_mark_vector.push_back(course_mark);
iss >> course_code;
course_code_vector.push_back(course_code);
std::getline(iss >> std::ws, course_name);
course_name_vector.push_back(course_name);
++i; //increment number of lines
}
course_stream.close(); //closing the file
std::cout << "Number of entries: " << i << std::endl;
return 0;
}
推荐阅读
- mongodb - 如何在 MongoDB 中将来自其他集合的文档的整个值更新为来自另一个具有相同 ID 键的文档?
- svelte - 如何在 Svelte 应用程序的共享功能中访问商店?
- vue.js - 现有 html 页面中的 Vue 组件
- java - 如何使 java 代码在 MacOS 和 Windows 上都可以工作?
- java - 在表单中自动填充日期字段
- image-processing - 使用 DataGenerators keras 的预测不同
- localization - 源头文件中的 i18n 字符串
- html -
- android-jetpack-compose - Android Compose LazyColumn IllegalArgumentException:密钥已被使用
- javascript - 根据 React 中的 url 切换一个类