2012-09-24 78 views
0

我是新來的問題解決。我正在解決名爲Expression的UVA問題。我想我已經解決了這個問題,因爲我的代碼爲每個可能的測試案例提供了正確的輸出。但是我仍然得到WA。我似乎在某處打印了一個我沒有做好的換行符。問題是:「輸出文件將每個後綴表達式都放在一行上,在不同的表達式之間打印一個空行。」有人可以向我解釋清楚一點。我在小組中提出了這個問題,但我沒有得到答案。而以前的討論也沒有幫助。提前致謝。我很難打印換行

#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; 
} 
+1

請顯示您想出的代碼 – Mike

+2

更多的上下文/代碼會有所幫助,但是,您似乎只需要在打印之間添加空行。嘗試用'\ n「或者'std :: endl' –

+0

實際嘗試'」\ n \ n「' - 如果你想在打印之間留空行。 –

回答

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

[email protected]:~> ./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; 

改爲在多行之間插入多餘的空白。