Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从文本文件中提取特定值(char&;int)并插入多个变量C++;_C++_File_Ifstream_Friend - Fatal编程技术网

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

C++ 从文本文件中提取特定值(char&;int)并插入多个变量C++;,c++,file,ifstream,friend,C++,File,Ifstream,Friend,下面是我需要从中提取数据的文件 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

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

    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
我需要创建三个自动对象,auto1、auto2、auto3

到目前为止,我掌握的代码是:

[我的代码]

我需要修改此方法以跳过“引擎:”、“最大速度:”。。。etc并获取这些属性标题后面的信息,并在相应的属性中插入相应的值

此外,我还需要找到一种让编译器知道的方法,例如在创建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;
        }

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

解决此问题的一种方法是(例如,
auto1
等),然后使用自定义的
操作符>
函数读取对象的实际数据,可能与您已经做的非常类似

不过,输入运算符的功能需要与您现在拥有的有所不同。您可以像您所知道的那样以类似的方式继续,但首先需要阅读每行“标记”(例如
引擎:
最大速度:
),最简单的方法是这样做:

std::string dummy;
in >> dummy >> a.engine;
in >> dummy >> a.max_speed;
我可能不会这样做,因为如果其他程序按照您当前读取的错误顺序写入此文件,该怎么办?相反,我可能会一次又一次地将输入分为两部分,分别是
:“
字符、“tag”或“key”和值。然后,您可以检查key,查看要在结构中分配的值

对于将字符串转换为整数,有一个方法可以帮助您

例如:

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

为什么要为
a.engine
使用动态分配的数组而不是例如
std::string
?或者至少如果在编译时使用固定大小的数组。@Alexandru没有帮助?我一直在读你的答案。我还是个新手,无法实现你写的:)我试了又试。就在几分钟前,我意识到我需要在类中修改代码,而不是在上面的方法中修改main。你当时应该已经发表了评论。我正在谷歌上搜索,但我找不到任何与我类似的例子,或者我认为是这样的。谢谢!:)但现在我还有两个问题。在我的朋友ifstream方法中,我是否声明字符串键;?和“数据”,是什么那个?文件?我正试图实现你所说的。但是我运气不好。我需要读更多的内容。在我的friend方法中,我添加了字符串s;getline(In,s);但是我不知道s将存储什么,只是第一行?然后使用s.substr()进行拆分,我也不知道必须插入什么作为参数(我知道第一个是位置,第二个是距离该位置有多少人)@AlexandruNutu你需要到
的位置:“