c++ - 如何将文件读入元组向量?
问题描述
我想阅读一个文本文件,其中包含以下数据:
Wogger John 2 6.2
Bilbo 111 81.3
Mary 29 154.8
由制表符分隔的数据。问题是如果字符串包含空格(例如:'Wogger John'),那么程序就不能工作。如果我将字符串“Wogger John”替换为“Wogger”或“John”,该程序确实有效。如何解决问题?如何使用 getline() 函数。这里的代码:
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <cerrno>
#include <cstring>
#include <tuple>
std::vector<std::tuple<std::string, int, double>> Readfile()
{
std::ifstream File("file_read_v3.txt");
std::vector<std::tuple<std::string, int, double>> data;
std::string name;
int a;
double b;
while (File >> name >> a >> b)
{
data.push_back(std::tuple<std::string, int, double>(name, a, b));
}
return data;
}
int main()
{
auto vt = Readfile();
for (const auto& i : vt) {
std::cout << std::get<0>(i) << ", " << std::get<1>(i) << ", " << std::get<2>(i) << std::endl;
}
return 0;
system("pause");
}
解决方案
while (std::getline(File, name, '\t') >> a >> b)
{
data.push_back(std::tuple<std::string, int, double>(name, a, b));
}
std::getline
读取并包含分隔符,然后丢弃分隔符。它默认分隔符是换行符;在这里,我们将其设为选项卡。
推荐阅读
- python - 如何使用 api 和 python 将 zip 文件 RAW 上传到 Nexus 存储库
- javascript - 为什么 Filatov 使用 OR 语句?
- python - 如何过滤与特定国家相交的轨道路径?
- ios - 呈现模态覆盖 ViewController 会删除视图层次结构的先前形式
- html - 带有内场图形的偏移文本光标?
- facebook - 如何通过 API 在 Instagram 上发布帖子
- python - 创建一个代码以在每个洞后加倍用户的输入(下注)
- scala - 在 Spark 中写入 CSV 数据时持续出现 EMR 一致性故障
- node.js - EXDEV:不允许跨设备链接,重命名 '/usr/local/lib/node_modules/npm' -> '/usr/local/lib/node_modules/.npm-i9nnxROI'
- javascript - 如何使用 CSS 在 Vue JS v-for 循环中添加换行符