#include<stack>
#include<vector>//vector是一个能够存放任意类型的动态数组,能够增加和压缩数据
intpriority(char op) //运算符的优先级
{
switch(op)
{
case'(':
return0;
break;
case'+':
case'-':
return1;
break;
case'*':
case'/':
return2;
break;
default:
return-1;
break;
}
}
boolIsOperator(char op) //是否为运算符
{
if(op == '+' || op == '-' || op == '*' || op == '/')
{
returntrue;
}
returnfalse;
}
voidinTOpost(char s[],vector<char>&v) //转为后缀表达式,两个形参,一个是中缀表达式的字符串,一个是动态数组v(用来放生成的后缀表达式)
{
stack<char>stk; //定义了一个字符串类型的栈,用来存放操作符的栈
inti = 0,len = strlen(s);
while(i< len)
{
if(s[i]>= '0' && s[i] <= '9') //如果读入的字符为0到9
{
v.push_back(s[i]); //把数字字符加入到动态数组
v.push_back(''); //把空格加入到动态数组
}
elseif (s[i] == '(') //如果读入的字符为“(”
{
stk.push(s[i]); //把“(”加入栈stk
}
elseif (s[i] == ')') //如果读入的字符为“)”
{
while(stk.top()!= '(') //如果stk的栈顶不是“(”
{
v.push_back(stk.top()); //把stk栈的栈顶的操作符加入到动态数组
v.push_back(''); //把空格加入到动态数组
stk.pop(); //把stk栈顶的操作符弹出
}
stk.pop(); //把栈顶的“(”操作符弹出
}
elseif (IsOperator(s[i]))
{
if(!stk.empty())
{
while(!stk.empty()&& priority(s[i]) <= priority(stk.top()))
{
v.push_back(stk.top());
v.push_back('');
stk.pop();
}
};
stk.push(s[i]);
}
i++;
}
while(!stk.empty()) //如果stk栈不为空,把剩余的栈内的操作符加入到动态数组中
{
v.push_back(stk.top());
v.push_back('');
stk.pop();
}
}
联系客服