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