gpt4 book ai didi

c++ - 表达式:双端队列迭代器不可取消引用

转载 作者:行者123 更新时间:2023-11-30 01:53:53 26 4
gpt4 key购买 nike

我正在用 C++ 编写程序以将中缀转换为后缀。这是我的代码。

#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 它转换表达式后缀。但是当 - 来的时候。它显示以下错误。

表达式:双端队列迭代器不可取消引用

显然它与 Queue 有关,我什至没有使用过 Queue。

屏幕截图: https://www.facebook.com/photo.php?fbid=241461649373492&set=a.118955391624119.1073741827.100005289761090&type=1

最佳答案

堆栈是一个容器适配器。

默认情况下它采用deque。您可能只是从一个空堆栈中弹出。

关于c++ - 表达式:双端队列迭代器不可取消引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22648290/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com