首页 > 解决方案 > 如何将文件读入元组向量?

问题描述

我想阅读一个文本文件,其中包含以下数据:

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");
}

标签: c++filevectortuples

解决方案


while (std::getline(File, name, '\t') >> a >> b)
{        
    data.push_back(std::tuple<std::string, int, double>(name, a, b));
}

std::getline读取并包含分隔符,然后丢弃分隔符。它默认分隔符是换行符;在这里,我们将其设为选项卡。


推荐阅读