我是解决问题的新手。我正在解决UVA中一个名为Expression的问题。我想我已经解决了这个问题,因为我的代码为每个可能的测试用例提供了正确的输出。但我仍然得到西澳大利亚州。似乎在某个地方我打印了一条我没有做好的换行。问题是“输出文件将在一行中包含每个后缀表达式。在不同表达式之间打印一个空行。”有人可以向我解释一下这一点。我已经在小组中提出了这个问题,但我没有得到答案。以前的讨论也没有帮助。提前谢谢。
#include<iostream>
#include<map>
#include<stack>
#include<vector>
#include<cstdio>
using namespace std;
void push_into_stack(char c, vector< char > &ans, stack< char > &st);
void work_with_stack(vector< char > &ans, stack< char > &st);
int main(void)
{
freopen("input.txt", "r", stdin);
int t;
char dummy;
cin >> t;
for(int i=1; i<=t; i++)
{
vector< char > exp, ans;
stack< char > st;
char c;
while(cin >> c)
exp.push_back(c);
for(int i=0; i<exp.size(); i++)
if(exp[i]=='+' || exp[i]=='-' || exp[i]=='*' || exp[i]=='/') push_into_stack(exp[i], ans, st);
else if(exp[i]=='(') st.push(exp[i]);
else if(exp[i]==')') work_with_stack(ans, st);
else ans.push_back(exp[i]);
while(!st.empty())
{
ans.push_back(st.top());
st.pop();
}
for(int i=0; i<ans.size(); i++)
cout << ans[i];
cout << endl;
}
return 0;
}
void push_into_stack(char c, vector< char > &ans, stack< char > &st)
{
map< char, int > mp;
mp['/']=2;
mp['*']=2;
mp['+']=1;
mp['-']=1;
while(true)
{
if(!st.empty() && mp[c]<=mp[st.top()])
{
ans.push_back(st.top());
st.pop();
}
else
{
st.push(c);
break;
}
}
return;
}
void work_with_stack(vector< char > &ans, stack< char > &st)
{
while(true)
{
if(st.top()=='(') break;
ans.push_back(st.top());
st.pop();
}
st.pop();
return;
}
答案 0 :(得分:0)
int main(void) {
char postfixone[] = "4 5 7 2 + - * -16";
char postfixtwo[] = "3 4 + 2 * 7 / 2";
char postfixthree[] = "5 7 + 6 2 - * 48";
printf("%s\n\n",postfixone);
printf("%s\n\n",postfixtwo);
printf("%s\n\n",postfixthree);
}
mike@linux-4puc:~> ./a.out
4 5 7 2 + - * -16
3 4 + 2 * 7 / 2
5 7 + 6 2 - * 48
每一个都在一条线上,中间有一条新线......
修改强> 我猜你正在使用C ++并在这里打印这些行:
for(int i=0; i<ans.size(); i++)
cout << ans[i];
cout << endl;
您使用endl为每个后缀打印一个新行,请尝试:
cout << endl << endl;
而是在行之间插入额外的空白。