如何在C++中推送堆栈中给定范围内的字符串


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";
}
}
}
}

最新更新