gpt4 book ai didi

C++读取文件并省略了一些信息

转载 作者:太空宇宙 更新时间:2023-11-04 12:56:45 25 4
gpt4 key购买 nike

我有一个结构如下的文本文件:

G 15324 2353
D 23444
Q 23433 32565

我想将每条信息存储到一个变量中并将其包含在一个 vector 中:

ifstream fin;
fin.open("file.txt");
vector<SomeClass> test;
SomeClass temp;
while (fin >> temp.code >> temp.datapoint>> temp.dataleague)
{
test.push_back(temp);
}

但是,有时文件中的第三个值 (temp.dataleague) 会被省略并留空。显然,我上面的代码将不起作用,因为它只会将垃圾放入该字段中。如果不确定第三个字段是否包含值,我该怎么做?

最佳答案

您可以尝试使用:

std::istream::getline

这将允许您将每一行放入缓冲区,然后按您的意愿进行处理。

char buffer[256];
fin.getline(buffer,256);

然后您可以使用以下方法解析不同的字段:

std::string line = std::string(buffer);
int index = line.find(' ');
if (index>0)
std::cout << "My value is: " << line.substr(0,index);

以你为例:

ifstream fin;
fin.open("file.txt");
vector<SomeClass> test;
SomeClass temp;
char buffer[256];

while (!fin.eof())
{
fin.getline(buffer,256);
auto line = std::string(buffer);
std::vector<std::string> tokens;
int start = 0, end = line.find(' ');
while (end!=-1)
{
tokens.push_back(line.substr(start,end-1));
start = end +1;
end = line.find(' ');
}
if (start<line.size())
tokens.push_back(line.substr(start));
if (tokens.size()==3)
{
test.code = tokens[0];
test.datapoint= tokens[1];
test.dataleague= tokens[2];
test.push_back(temp);
}
}

关于C++读取文件并省略了一些信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46167675/

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