打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
c语言---把中缀表达式转换为转换为后缀表达式

#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') //如果读入的字符为09

{

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

}

}

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
前缀、中缀、后缀表达式
利用堆栈解析算术表达式一:基本过程
hdoj 1237 简单计算器(计算器应用)
女朋友学高数,我花了 15 分钟用栈给她写了一个计算器 | 原力计划
四则运算表达式求值(栈的应用)
利用栈将 (中缀表达式) 转换成 (后缀表达式)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服