int main()
{
istringstream iss(dtr);
Stack <string> mudassir;
mudassir.push1(s1);
string subs;
do {
iss >> subs;
if (subs == "|post_exp|")
{
iss >> subs;
while (subs != "|\post_exp|")
{
mudassir.push(subs);
cout << "heloo";
iss >> subs;
}
}
} while (iss);
}
我想把字符串的某个元素放入堆栈中。但问题是,在这段代码中,包含hello
(仅用于测试(的内部while
循环正在无限运行。我不知道为什么。
内部
while
循环中有hello
(仅用于测试(正在无限运行。我不知道为什么。
当流到达其数据的末尾时,不考虑内部while
循环。
当operator>>
到达流的末尾时,它将使流进入eofbit
状态,并且subs
将被设置为流中剩余的任何数据。operator>>
的后续读取将使流进入failbit
状态,并将subs
设置为空值。
您的内部循环完全忽略流的状态,并且空白值满足您正在检查的!=
条件。这就是为什么你的循环永远运行。
你需要注意流的状态。例如:
int main()
{
istringstream iss(dtr);
Stack <string> mudassir;
mudassir.push1(s1);
string subs;
while (iss >> subs) {
if (subs == "|post_exp|")
{
while (iss >> subs && subs != "|\post_exp|")
{
mudassir.push(subs);
cout << "heloo";
}
}
}
}