gpt4 book ai didi

c++ - 为什么删除命令会结束我的 while 循环?

转载 作者:行者123 更新时间:2023-11-30 02:14:58 24 4
gpt4 key购买 nike

所以我有一段代码工作得很好。目标是过滤我的 whatsapp - 聊天记录。我想要做的第一件事是整理,以便只整理出以“Ben:...”开头的消息,其余的则丢弃。

我成功了,但只是因为一个我无法理解的奇怪功能。由于一些较早的尝试,我的代码中有一个删除命令,目前没有实际用途。然而,如果没有它,我的 while 循环就会无限循环。

为什么删除命令帮助我完成循环?

我尝试删除它,并尝试了其他想法。没有任何效果。

#include <iostream>
#include <string>
#include <fstream>

using namespace std;

int main(){
string text;
string deli = "Ben:";

string token;
size_t pos = 0;

ifstream myfile;
myfile.open("WAEZ.txt");

while( getline(myfile, text)){
while((pos = text.find(deli)) != std::string::npos){
token = text.substr(pos,std::string::npos);
cout << token << endl;
text.erase(0, pos + deli.length());
}
}
}

我想让这段代码在没有我不使用的删除命令的情况下工作。

最佳答案

text.find(deli)) 正在您的字符串中查找内容,如果找到,则 text.find(deli)) != std::string::npos 是真的。如果您使用相同的 text 和相同的 deli 再次调用它,那么结果将是相同的。

在您的循环中,text.erase(0, pos + deli.length()); 更改字符串 text。如果没有这部分,您的循环中的任何内容都不会更改 textdeli。这就是它导致无限循环的原因:如果 text.find(deli)) != std::string::npos 第一次为 true,则永远为真没有什么可以阻止它,因为您的代码中也没有任何 break 或任何其他类型的逻辑可以跳出循环。

关于c++ - 为什么删除命令会结束我的 while 循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56902624/

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