将文件中的整数读入具有单独成员变量的结构
Read Integers From a File Into A Struct with Separate Member Variables
我有一个包含此数据的文件:
3
0 0.5
1 0.23
100 -0.5
2
1 0.01
6 -0.55
我有两个私有成员 x 和 y 变量的私有结构和列表:
struct FTerm {
int m_delay;
double m_weight;
};
std::list<FTerm> m_xterms;
std::list<FTerm> m_yterms;
结果应包含
for 3 m_xterms:
m_delay contains 0, 1, 100
m_weight contains 0.5, 0.23, -0.5
for 2 m_yterms:
m_delay contains 1, 6
m_weight contains 0.01, -0.55
到目前为止我有这个:
ifstream filt(dlg.GetPathName());
if (filt.fail())
{
AfxMessageBox(L"Failed to open filter transfer equation file");
return;
}
int numXTerms;
string line;
while (getline(filt, line))
{
istringstream iss(line);
FTerm term;
while (iss >> numXTerms)
{
filt >> numXTerms >> term.m_delay >> term.m_weight;
m_xterms.resize(numXTerms);
m_xterms.push_back(term);
}
}
这是我从调试中得到的,所以我不确定它是否真的有效:
我还需要弄清楚如何在换行后获取 Y 值,有没有办法检查换行并编写另一个 while 循环?
你有几点不太对:
- 由于已知项数,for 循环可能会更好
- 向量可能比列表更好。
- 您可以将数据直接提取到对象中,而无需增加字符串流的费用
像这样的东西应该可以工作:
std::vector<FTerm> m_xterms;
std::vector<FTerm> m_yterms;
int numFTerms;
std::string line;
filt >> numFTerms;
m_xterms.resize(numFTerms);
for (int i = 0; i < numFTerms; i++)
{
FTerm term;
filt >> term.m_delay >> term.m_weight;
m_xterms[i] = term;
}
//ignore empty line
filt.ignore(1);
filt >> numFTerms;
m_yterms.resize(numFTerms);
for (int i = 0; i < numFTerms; i++)
{
FTerm term;
filt >> term.m_delay >> term.m_weight;
m_yterms[i] = term;
}
我有一个包含此数据的文件:
3
0 0.5
1 0.23
100 -0.5
2
1 0.01
6 -0.55
我有两个私有成员 x 和 y 变量的私有结构和列表:
struct FTerm {
int m_delay;
double m_weight;
};
std::list<FTerm> m_xterms;
std::list<FTerm> m_yterms;
结果应包含
for 3 m_xterms:
m_delay contains 0, 1, 100
m_weight contains 0.5, 0.23, -0.5
for 2 m_yterms:
m_delay contains 1, 6
m_weight contains 0.01, -0.55
到目前为止我有这个:
ifstream filt(dlg.GetPathName());
if (filt.fail())
{
AfxMessageBox(L"Failed to open filter transfer equation file");
return;
}
int numXTerms;
string line;
while (getline(filt, line))
{
istringstream iss(line);
FTerm term;
while (iss >> numXTerms)
{
filt >> numXTerms >> term.m_delay >> term.m_weight;
m_xterms.resize(numXTerms);
m_xterms.push_back(term);
}
}
这是我从调试中得到的,所以我不确定它是否真的有效:
我还需要弄清楚如何在换行后获取 Y 值,有没有办法检查换行并编写另一个 while 循环?
你有几点不太对:
- 由于已知项数,for 循环可能会更好
- 向量可能比列表更好。
- 您可以将数据直接提取到对象中,而无需增加字符串流的费用
像这样的东西应该可以工作:
std::vector<FTerm> m_xterms;
std::vector<FTerm> m_yterms;
int numFTerms;
std::string line;
filt >> numFTerms;
m_xterms.resize(numFTerms);
for (int i = 0; i < numFTerms; i++)
{
FTerm term;
filt >> term.m_delay >> term.m_weight;
m_xterms[i] = term;
}
//ignore empty line
filt.ignore(1);
filt >> numFTerms;
m_yterms.resize(numFTerms);
for (int i = 0; i < numFTerms; i++)
{
FTerm term;
filt >> term.m_delay >> term.m_weight;
m_yterms[i] = term;
}