2014-03-25 34 views
0

我正在用C++編寫程序來將中綴轉換爲後綴。這是我的代碼。表達式:Deque迭代器不可忽略

#include<iostream> 
#include<stack> 
#include<string.h> 

using namespace std; 


int getPrecedence(char tmp) 
{ 
    if(tmp=='+') 
    { 
     return 1; 
    } 
    else if(tmp == '-') 
    { 
     return 1; 
    } 
    else if(tmp == '*') 
    { 
     return 2; 
    } 
    else if(tmp == '/') 
    { 
     return 2; 
    } 
} 

int main() 
{ 

    stack<char> st; 

    char expression[10]; 


    //cout<<"Enter expression : "; 
    //cin>>expression; 

    strcpy(expression,"a+b*c/d-e"); 

    char postfix[100]; // its postfix string 
    int counter=0; 

    int i=0; 


    while(expression[i] != '\0') // iterate till '/0' does not come. 
    { 
     if(expression[i]== '+' || expression[i]== '-' || expression[i]== '*' || expression[i]== '/' ) 
     { 
      if(st.empty()) 
      { 
       st.push(expression[i]); 
      } 
      else // when stack not empty 
      { 
       int topPrecedence = getPrecedence(st.top()); 
       int expressionPrecedence = getPrecedence(expression[i]); 


       while(!(topPrecedence < expressionPrecedence)) 
       { 
        postfix[counter++] = st.top(); 
        st.pop(); 
        topPrecedence = getPrecedence(st.top()); 
       } 

       if(st.empty()) 
       { 
        st.push(expression[i]); 
       } 

       if(topPrecedence < expressionPrecedence) 
       { 
        st.push(expression[i]); 
       } 


      } 
     } 
     else // when its an alphabet 
     { 
      postfix[counter++] = expression[i]; 
     } 


     i++; 
    } // outer while ends 

    while(! st.empty()) 
    { 
     postfix[counter++] = st.top(); 
     st.pop(); 
    } 


    postfix[counter] = '\0'; 
    i=0; 

    while(postfix[i] != '\0') 
    { 
     cout<<postfix[i]<<" "; 
     i++; 
    } 



    system("pause"); 
    return 0; 
} 

例如,如果輸入表達式是a+b*c/d-e。直到d它轉換表達式後綴。但是當-來臨。它顯示以下錯誤。

Expression:deque iterator not dereferencable

顯然它涉及到隊列中,我還沒有使用隊列。

Screen capture: https://www.facebook.com/photo.php?fbid=241461649373492&set=a.118955391624119.1073741827.100005289761090&type=1

回答

3

堆棧是一個容器適配器。

默認情況下它適應deque。你可能只是從一個空的堆棧彈出。