gpt4 book ai didi

c++ - 解析 sstream

转载 作者:太空宇宙 更新时间:2023-11-04 14:26:11 26 4
gpt4 key购买 nike

我正在解析一个包含字符串和数值的文件。我想逐个字段处理文件,每个字段由空格或行尾字符分隔。ifstream::getline() 操作仅允许单个定界字符。因此,我目前所做的是以字符 ' ' 作为分隔符的 getline,然后如果遇到 '\n' 则手动返回到流中的先前位置:

 ifstream ifs ( filename , ifstream::in );
streampos pos;
while (ifs.good())
{
char curField[255];

pos = ifs.tellg();
ifs.getline(curField, 255, ' ');
string s(curField);
if (s.find("\n")!=string::npos)
{
ifs.seekg(pos);
ifs.getline(curField, 255, '\n');
s = string(curField);
}

// process the field contained in the string s...
}

但是,“seekg”似乎将流定位到一个字符太晚了(因此我错过了每个换行符之前每个字段的第一个字符)。我知道还有其他方法可以通过逐行扫描等方式对此类解析器进行编码,但我真的很想了解为什么这段特殊的代码会失败...

非常感谢!

最佳答案

正如 Loadmaster 所说,可能有字符丢失,或者这可能只是一个差一个错误。

但这只是必须要说的......你可以替换它:

 ifstream ifs ( filename , ifstream::in );
streampos pos;
while (ifs.good())
{
char curField[255];

pos = ifs.tellg();
ifs.getline(curField, 255, ' ');
string s(curField);
if (s.find("\n")!=string::npos)
{
ifs.seekg(pos);
ifs.getline(curField, 255, '\n');
s = string(curField);
}

// process the field contained in the string s...
}

有了这个:

 ifstream ifs ( filename , ifstream::in );
streampos pos;
string s;
while (ifs.good())
{
ifs >> s;
// process the field contained in the string s...
}

获得你想要的行为。

关于c++ - 解析 sstream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3868873/

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