gpt4 book ai didi

c++ - 操纵输入文件流

转载 作者:行者123 更新时间:2023-11-30 01:24:47 25 4
gpt4 key购买 nike

我有一个包含这个的数据文本文件

Map2D, [3, 2]
Dot3D, [25, -69, -33], [-2, -41, 58]
Map3D, [6, 9, -50]
Map2D, [3, 2]
Dot3D, [7, -12, 3], [9, 13, 68]
Map3D, [6, 9, 5]
Map2D, [3, 2]
Dot3D, [70, -120, -3], [-29, 1, 268]
Dot3D, [7, 12, 3], [-9, 13, 68]
Map3D, [1, 3, 8]
Dot2D, [5, 7], [3, 8]

基本上文本文件的第一个数据是我得到的 4 个类的类名

Map2D
Map3D
Dot2D
Dot3D

我试图编写自己的文件操纵器,以便我的程序可以提取上面的数据并为 4 个类中的每一个重载提取运算符 >>,然后将其存储到相关对象中。

我在考虑使用 vector 、 map 、集合或列表来存储。但是为此我如何实现我想做的事情,例如存储到类的相关对象中。

我尝试在谷歌上搜索如何创建我自己的文件操纵器,但如果有人可以向我展示一些示例代码并且我可以在测试文件中编译和执行它,然后自己观察输出,那就更好了。我想使用 iomanip 对 >> 运算符进行重载

我必须使用操纵器,因为我需要创建类似的东西

我需要做类似的事情

cout << "Input File Name";
cin >> readFile;

并执行所有数据读取和对象创建

对于造成的所有麻烦,我深表歉意。然后它会逐行读取记录,然后创建类和其中的数据。

感谢您的帮助!

最佳答案

这是 std::cin 的示例。它应该与 fstream 一起正常工作。解析你的输入真的很讨厌。是否可以从输入中删除括号(“[”amd“]”)?

#include <iostream>
#include <string>
#include <vector>
#include <sstream>
#include <algorithm>
#include <c>

class Map2D {
std::vector<int> values;
public:
friend std::istream& operator>>(std::istream& in, Map2D m) {
std::string i;
in >> i;
std::stringstream ss(i);
std::getline(ss, i, '[');
std::getline(ss, i, ',');
ss >> i;
std::cout << i << std::endl;
in >> i;
ss.str("");
ss << i;
i = i.substr(0, i.size()-1);
ss >> i;
std::cout << i << std::endl;;
}
};

int main() {
std::string type, file_name;
std::cout << "Input File Name";
std::cin >> file_name;
std::fstream file(file_name.c_str());
Map2D m;
while (std::getline(std::cin, type, ',')) {
if(type.find("Map2D") != std::string::npos) {
file >> m;
}
}
}

关于c++ - 操纵输入文件流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13349204/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com