多位数的后缀表达式求值

博客内容介绍了如何处理中缀表达式转后缀表达式时的多位数问题,通过扫描并拼接数字,利用后缀表达式进行计算。
摘要由CSDN通过智能技术生成

表达式求值:

主要思路:

 先将中缀表达式转换为后缀表达式  preTopost()函数

主要问题:两位数或者多位数怎么办?

答案:找到一个数字时,继续向后扫描,直到不是数字;将扫描到的拼成一个数字,在后缀字符串post中以#号分割,

计算的时候自动忽略#号即可。

代码如下:

//
//Author NEFUZYJ
//created time 2019-04-30
//title "表达式求值"
//
#include<iostream>
#include<stack>
#include<string>
using namespace std;
//转化为后缀表达式
string s;
char post[200];
int z = 0;
stack<int> num;
stack<char> opt;//算符栈

int getPriority(char ch)
{
    if(ch == '*' ||ch =='/')
        return 2;
    if(ch == '+' ||ch == '-')
        return 1;
    return 0;
}
void preTopost()
{
    int len = s.size();

    int nowOrder = 0,topOrder = 0;
    for(int i = 0; i < len; i++)
    {
        if(s[i]
  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这里是一个使用栈来计算后缀表达式值的 Python 代码: ``` python def evaluate_expression(expression): # 将中缀表达式转换为后缀表达式 postfix = infix_to_postfix(expression) # 创建一个栈来计算后缀表达式的值 stack = [] # 遍历后缀表达式 for token in postfix: # 如果是数字,则将其推入栈中 if token.isdigit(): stack.append(int(token)) # 如果是操作符,则弹出栈顶的两个数字进行计算,并将结果推入栈中 else: num2 = stack.pop() num1 = stack.pop() result = evaluate_operator(num1, num2, token) stack.append(result) # 最后,栈顶元素即为后缀表达式的值 return stack.pop() # 将中缀表达式转换为后缀表达式 def infix_to_postfix(expression): # 运算符优先级 precedence = {'+': 1, '-': 1, '*': 2, '/': 2} # 创建一个栈来保存运算符 stack = [] # 创建一个列表来保存后缀表达式 postfix = [] # 将中缀表达式转换为列表 tokens = expression.split() # 遍历中缀表达式的每个token for token in tokens: # 如果是数字,则直接将其加入后缀表达式中 if token.isdigit(): postfix.append(token) # 如果是左括号,则将其推入运算符栈中 elif token == '(': stack.append(token) # 如果是右括号,则弹出运算符栈中的运算符,直到遇到左括号 elif token == ')': while stack[-1] != '(': postfix.append(stack.pop()) stack.pop() # 弹出左括号 # 如果是运算符,则将其推入运算符栈中,直到栈顶的运算符优先级低于该运算符 else: while stack and stack[-1] != '(' and precedence[token] <= precedence[stack[-1]]: postfix.append(stack.pop()) stack.append(token) # 将剩余的运算符依次弹出并加入后缀表达式中 while stack: postfix.append(stack.pop()) return postfix # 计算两个数字的运算结果 def evaluate_operator(num1, num2, operator): if operator == '+': return num1 + num2 elif operator == '-': return num1 - num2 elif operator == '*': return num1 * num2 elif operator == '/': return num1 / num2 ``` 你可以调用 `evaluate_expression` 函数来计算一个多位数表达式的值。例如,`evaluate_expression("3 + 4 * 5 - 6 / 2")` 将返回 20。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值