gpt4 book ai didi

c++ - string::std find 方法总能找到一个字符,即使它不在字符串中

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

我正在为学校做一个项目,我们正在解析从文本文件传入的字符串。但是,我在使用 string.find 时遇到了问题。当我运行这段代码时:

string theFile;
while (inFile)
{
inFile.getline(line, 512);
theFile = line;
bool parsing = true;
while (parsing){
Choice *newChoice = new Choice;
if (theFile.find("|")!= -1) {
newChoice->lines = theFile.substr(theFile.find("%") + 1, theFile.find("|") - 1);
theFile.erase(0, theFile.find("|") + 2);
tempNPC->choices.push_back(newChoice);
}
else
parsing = false;

输入看起来像这样:

| d1% stuff | d2% more stuff |

我的问题:if 语句永远不会为假。即使 theFile 为空,它仍然会运行代码,因此出现越界错误。知道为什么 find("|") 不起作用吗?

*编辑以添加我如何从文件中获取字符串

最佳答案

您可能想看一些 documentation ,因此您可以找出 std::string::find 的返回值的实际含义。具体来说,如果您不确定某个值是否存在,您应该在使用它之前将其与 npos 进行比较,而不是“-1”。在您的输入耗尽后它继续运行的问题可能最好在您未显示的输入代码中解决,而不是尝试解析一些可能是也可能不是实际输入的 string

更新:正如我在下面对 vsoftco 的评论中推测的那样,您的输入逻辑已损坏。使用这个:

while (getline(inFile, theFile))
...

关于c++ - string::std find 方法总能找到一个字符,即使它不在字符串中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30251249/

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