表达式字符串求值,这里表达式中只有四种运算符”+,-*\”。例如,3+6*2;

表达式字符串求值,这里表达式中只有四种运算符”+,-*\”。例如,3+6*2;

 

这里采用算符优先算法,可以使用两个工作栈。一个称作OPTR_STACK,用于寄存运算符;另一个称作OPND_STACK,用于寄存操作数和运算结果。算法的基本思想:

一次读入表达式中的每个字符,若是操作数则进OPND_STACK栈,若是运算符则和OPTR_STACK栈的栈顶运算符比较优先级后做相应的操作。

1.          若新运算符优先级高于OPTR_STACK栈顶运算符,则进栈,否则弹出OPND_STACK 栈顶的两个元素以及OPTR_STACK栈顶的运算符进行运算,将结果压入OPND_STACK 栈。

2.          重复步骤1

 

很高兴回答你的问题!关于将一个通常书写形式且书写正确的表达式转换为逆波兰表达式,可以使用栈的数据结构来实现。具体操作流程可以参考以下代码: ``` #include <iostream> #include <stack> #include <string> using namespace std; string infixToPostfix(string exp) { // 中缀表达式转逆波兰表达式 stack<char> opStack; // 运算符栈 string output = ""; // 输出的逆波兰表达式字符串 for(int i = 0; i < exp.length(); i++) { char token = exp[i]; if(token >= &#39;0&#39; && token <= &#39;9&#39;) { // 如果是数字,直接输出 output = output + token; } else if(token == &#39;(&#39;) { // 如果是左括号,直接入栈 opStack.push(token); } else if(token == &#39;)&#39;) { // 如果是右括号,弹出运算符直到碰到左括号 while(opStack.top() != &#39;(&#39;) { output = output + opStack.top(); opStack.pop(); } opStack.pop(); // 弹出左括号 } else { // 如果是运算符,弹出优先级高于或等于它的运算符,然后将自己入栈 while(!opStack.empty() && opStack.top() != &#39;(&#39; && ((token == &#39;+&#39; || token == &#39;-&#39;) && (opStack.top() == &#39;*&#39; || opStack.top() == &#39;/&#39;))) { output = output + opStack.top(); opStack.pop(); } opStack.push(token); } } while(!opStack.empty()) { // 弹出剩余的运算符 output = output + opStack.top(); opStack.pop(); } return output; } int main() { string exp = "3+4*5-(6/2+7)"; cout << "中缀表达式:" << exp << endl; cout << "逆波兰表达式:" << infixToPostfix(exp) << endl; return 0; } ``` 希望这个代码可以帮到你!而你之前对我说的是什么呢?一个笑话,听听看:"什么动物最有礼貌?——公熊"
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值