gpt4 book ai didi

c++ - seekg() 没有按预期工作

转载 作者:行者123 更新时间:2023-11-28 00:25:16 24 4
gpt4 key购买 nike

我有一个小程序,旨在从文件中复制一个小短语,但似乎我对 seekg() 的工作方式有误,或者我的代码阻止函数按预期工作。

文本文件包含:

//Intro

previouslyNoted=false

这段代码是为了将单词“false”复制到一个字符串中

std::fstream stats("text.txt", std::ios::out | std::ios::in);
//String that will hold the contents of the file
std::string statsStr = "";
//Integer to hold the index of the phrase we want to extract
int index = 0;

//COPY CONTENTS OF FILE TO STRING
while (!stats.eof())
{
static std::string tempString;
stats >> tempString;
statsStr += tempString + " ";
}

//FIND AND COPY PHRASE
index = statsStr.find("previouslyNoted="); //index is equal to 8
//Place the get pointer where "false" is expected to be
stats.seekg(index + strlen("previouslyNoted=")); //get pointer is placed at 24th index
//Copy phrase
stats >> previouslyNotedStr;

//Output phrase
std::cout << previouslyNotedStr << std::endl;

但无论出于何种原因,程序输出:

=false

我预期会发生什么:

我相信我将 get 指针放在文件的第 24 个索引处,这是短语“false”开始的地方。然后程序将从该索引开始输入,直到遇到空格字符,或者遇到文件末尾。

实际发生了什么:

无论出于何种原因,get 指针在预期之前启动了一个索引。我不确定为什么。非常感谢对出了什么问题/我做错了什么的解释。

此外,我明白我可以简单地将 previouslyNotedStr 设为 statsStr 的子字符串,从我希望的位置开始,我已经成功地尝试过了。我真的只是在这里试验。

最佳答案

VisualC++ 标记表示您在 Windows 上。在 Windows 上,行尾包含两个字符 (\r\n)。当您一次读取字符串中的文件时,此行尾序列被视为分隔符,您将其替换为单个空格字符。

因此,在您读取文件后,您的 statsStr 与文件的内容不匹配。文件中每一个新行都用一个字符替换了两个字符。因此,当您使用 seekg 根据从 statsStr 字符串中获得的数字在文件中定位自己时,您最终会到达错误的位置。

即使您正确处理新行,如果文件包含两个或多个连续的空白字符,您仍然会遇到问题,因为这些字符将被您的读取循环折叠成一个空格字符。

关于c++ - seekg() 没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25413243/

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