如何在同一行中使用具有多个变量的 getline()

How to use getline() with multiple variables in the same line?

本文关键字:getline 变量 一行      更新时间:2023-10-16

我正在尝试从文件中读取每一行并将数据存储在每一行中。假设该行是"x y z"。getline 函数应该使用哪些参数来分别读取和存储 x、y 和 z?

void readData(Gene *data, int num)
{
    int codeNum;
    int i = 0;
    int k = num;
    ifstream inputFile;
    inputFile.open("example.data");
    inputFile >> codeNum;
    while(i < k){
     getline(inputFile, data[i].geneCode, data[i].MutCode[0],
            data[i].MutCost[0], data[i].MutCode[1],
            data[i].MutCost[1]);
     i++;
    }

这就是我所拥有的。请注意,我尝试读取的所有变量都是字符串,k 是行总数。尝试编译时,我收到一个错误,说"没有匹配的函数可以调用 getline(("和关于"候选函数模板不可行"的内容。知道我做错了什么吗?

我强烈建议您使用结构(或类(向量,而不是多个并行数组。

struct Mutation_Code_Cost
{
    Mutation_Code_Type MutCode;
    Mutation_Cost_Type MutCost;
};
struct Gene
{
    Gene_Code_Type geneCode;
    Mutation_Code_Cost mutation_info[2];
};

然后,您可以重载operator>>以从文本流中读取结构:

struct Mutation_Code_Cost
{
    Mutation_Code_Type MutCode;
    Mutation_Cost_Type MutCost;
    friend std::istream& operator>>(std::istream& input, Mutation_Code_Cost& mcc);
};
std::istream& operator>>(std::istream& input, Mutation_Code_Cost& mcc)
{
  input >> mcc.MutCode;
  input >> mcc.MutCost;
  return input;
}
struct Gene
{
    Gene_Code_Type geneCode;
    Mutation_Code_Cost mutation_info[2];
    friend std::istream& operator>>(std::istream& input, Gene& g);
};
std::istream& operator>>(std::istream& input, Gene& g)
{
    input >> g.geneCode;
    input >> g.mutation_info[0];
    input >> g.mutation_info[1];
    return input;
}

您可以像这样从文件中读取:

std::vector<Gene> database;
Gene g;
std::string record;
while (std::getline(input_file, record))
{
    std::istringstream record_stream(record);
    if (record >> g)
    {
        database.push_back(g);
    }
}