gpt4 book ai didi

c++ - 将文本文件存储到类中

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:28:51 26 4
gpt4 key购买 nike

我目前正在尝试将字符读入一个看起来像这样的类

 struct data {
string segment; string name;
double length; double radius; double wall_thickness;
double young_modulus; double compliance;

};

我还有一个包含以下元素的 vector :

  2A
Aorta_Ascendens
2
1.47
.164
4
53.4
2B
Aorta_Ascendens
2
1.44
.161
4
51.0
3A

我想将文本文件读入每个部分,目前我的算法是连续读取文本文件并分别添加每个部分。

int place = 0;

while (place != temp_data.size()){
int counter = 0;
for (counter; counter <= 7; ++counter){
istringstream is(temp_data[place + counter]);

if (counter == 0){ is >> a.segment; }
if (counter == 1){ is >> a.name; }
if (counter == 2){ is >> a.length; }
if (counter == 3){ is >> a.radius; }
if (counter == 4){ is >> a.wall_thickness; }
if (counter == 5){ is >> a.young_modulus; }
if (counter == 6){ is >> a.compliance; }

}
counter = counter - 1; //since the next segment is at temp_data[7], must subtract one to have place = 7.
place = counter + place;

v.push_back(a);
}

我遇到的问题是试图找到一种方法来确保文本的正确部分进入对象的正确部分。对于前七行文本,对象应该是这样的:

segment: 2A
name: Aorta_Ascendens
length: 2
radius: 1.47
wall_thickness: .164
young modulus: 4
compliance: 53.4

这应该对整个文本文件重复相同的方式。 temp_data 是一个 vector ,其中包含需要添加到对象中的元素,但我找不到一个好方法来不断循环遍历 vector 并将元素放在正确的位置。

我制作的算法有一个计数器和一个占位符,计数器将循环遍历 vector 点,占位符将为第一个对象的数据成员保留位置,在本例中为段。在算法结束时,place 应等于 temp_data 的大小并退出循环。但是我在编译和运行时遇到了问题,它似乎将错误的元素放入错误的对象成员中。

有什么想法吗?

最佳答案

解决这个问题的一种简单、干净的方法是编写自定义流操作符:

struct data {
string segment; string name;
double length; double radius; double wall_thickness;
double young_modulus; double compliance;

friend std::istream& operator>>(std::istream& is, data& d)
{
return is >> d.segment >> d.name >> d.length >> d.radius >> d.wall_thickness
>> d.young_modulus >> d.compliance;
}
};

没有 temp_dataistringstreamcounter

要使用它:

data d;
while (input_stream >> d)
v.push_back(d);
if (input_stream.fail())
...print error / exit or whatver...
else
...use v...

(有更多的声明性方法可以使用标准算法和 back_inserter 迭代器从流复制到 vector ,但恕我直言,简单明了是好的)

关于c++ - 将文本文件存储到类中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20623506/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com