我一直在环顾四周,尝试了很多方法,但不能为我的生活让Ctrl Z退出控制台。这是我的代码,有人可以指出我正确的方向:
这是在Windows上。
int main()
{
string s;
Stack *stack = new Stack();
while (cin >> s)
{
if (cin)
{
for (int i = 0; i < (int)s.length(); i++)
{
stack->push(s[i]);
}
for (int i = 0; i < s.length(); i++)
{
cout << stack->top();;
stack->pop();
}
cout << endl;
}
}
stack->~Stack();
delete stack;
return 0;
}
答案 0 :(得分:1)
在Windows上,按 Ctrl - Z 发出EOF信号。在Linux上,它是 Ctrl - D 。在任一系统中,您需要在行的开头按下它(即,在按下回车后)。
顺便说一句,没有必要明确地调用析构函数。摆脱这一行:
<击> 撞击>
stack->~Stack();
事实上,如果你完全摆脱new
和delete
,情况会好一些。那些闻起来像Java-isms。在C ++中,您不必总是使用new
来创建新对象。更基本的语法是写:
Stack stack;
这将创建一个Stack
对象并调用默认的no-arg构造函数。 main()
退出时,对象将自动销毁,因此您不需要delete
或显式析构函数调用。
最后,if (cin)
检查是多余的。 while
循环已检查是否已读取字符串。
while (cin >> s)
{
if (cin)
{
...
}
}
答案 1 :(得分:-1)
由于您使用的是内置堆栈,因此您不需要使用 .-&gt; ,并且不需要 if(cin)当 while(cin&gt;&gt; s)检查时,exertion流是否已到达结尾。这是正确的代码。
#include <string>
#include <stack>
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
string s;
stack <string> st;
while (cin >> s)
{
st.push(s);
cout << st.top();;
st.pop();
cout << endl;
}
st.~stack();
return 0;
}