从文本文件中提取特定值(char & int)并插入多个变量 C++

Extracting specific value (char & int) from a text file and inserting into multiple variables C++

下面是我需要从中提取数据的文件。

    auto1
    engine: gasoline
    max_speed: 250
    engine_cc: 1980
    avg_consumption_urban: 11
    avg_speed_urban: 50
    avg_consumption: 8
    avg_speed: 100
    auto2
    engine: diesel
    max_speed: 230
    engine_cc: 1600
    avg_consumption_urban: 9
    avg_speed_urban: 50
    avg_consumption: 6
    avg_speed: 80
    auto3
    engine: hybrid
    max_speed: 190
    engine_cc: 1450
    avg_consumption_urban: 7
    avg_speed_urban: 50
    avg_consumption: 4
    avg_speed: 90

我需要创建三个自动 objects、auto1、auto2、auto3。

我目前的代码:

[我的代码]http://pastebin.com/2TMhQX9b

我需要修改此方法以跳过 "engine:"、"max_speed:" ... 等并获取这些属性标题之后的信息并将相应的值插入相应的属性中。

我还需要找到一种方法让编译器知道例如在创建 auto2 时从文件中获取 auto2 而不是 auto1 的信息

    friend ifstream& operator>>(ifstream& in, Auto &a)
        {
            delete[]a.engine;
            a.engine = new char[10];
            in >> a.engine;
            in >> a.max_speed;
            in >> a.engine_cc;
            in >> a.avg_consumption_urban;
            in >> a.avg_speed_urban;
            in >> a.avg_consumption;
            in >> a.avg_speed;
            return in;
        }

这个问题和我之前的问题不一样。在这里,我需要了解如何从文件中获取数据并将其插入到多个变量中。

解决此问题的一种方法是 read one line(例如 auto1 等),然后使用自定义 operator>> 函数读取对象的实际数据,可能很多就像你已经做的那样。

输入运算符函数需要与您现在拥有的相比稍作更改。你可以像你知道的那样以类似的方式继续,但是你首先需要阅读每一行"tag"(例如engine:max_speed:),最简单的是这样做:

std::string dummy;
in >> dummy >> a.engine;
in >> dummy >> a.max_speed;

我可能不会那样做,因为如果其他程序以错误的顺序写入此文件,与您当前读取的顺序不符怎么办?相反,我可能再次一次 read one line,并将输入分成两个 子字符串 ':' 字符,"tag"或“键和值。然后您可以检查键以查看在结构中分配给什么值。

关于将字符串转换为整数,有一个nice function可以帮助您。

例如:

if (key == "max_speed")
    a.max_speed = std::stoi(data);