首页 > 其他分享 >中缀表达式求值

中缀表达式求值

时间:2023-02-25 22:35:40浏览次数:29  
标签:中缀 int top else num str 求值 表达式 op

#include <cstdio>
#include <cstring>
#include <stack>
#include <unordered_map>

using namespace std;

const int N = 100010;

char str[N];
stack<int> num;
stack<char> op;
unordered_map<char, int> pr({{'+', 1}, {'-', 1}, {'*', 2}, {'/', 2}});

void eval()
{
    int b = num.top(); num.pop();
    int a = num.top(); num.pop();
    char c = op.top(); op.pop();
    int x = 0;
    if (c == '+') x = a + b;
    else if (c == '-') x = a - b;
    else if (c == '*') x = a * b;
    else x = a / b;
    num.push(x);
}

int main()
{
    scanf("%s", str);
    
    for (int i = 0; i < strlen(str); i++) {
        char c = str[i];
        if (c == '(') op.push(c);
        else if (c == ')') {
            while (op.top() != '(') eval();
            op.pop();
        } else if (isdigit(c)) {
            int x = 0, j = i;
            while (j < strlen(str) && isdigit(str[j])) x = x * 10 + str[j++] - '0';
            i = j - 1;
            num.push(x);
        } else {
            while (op.size() && op.top() != '(' && pr[op.top()] >= pr[c]) eval();
            op.push(c);
        }
    }
    
    while (op.size()) eval();
    
    printf("%d", num.top());
    
    return 0;
}

标签:中缀,int,top,else,num,str,求值,表达式,op
From: https://www.cnblogs.com/cong0221/p/17155596.html

相关文章

  • c# regex正则表达式
    目录C#正则表达式Regex1.c#的正则表达式基本构成2.正则表达式模式2.1正则表达式中的定位点2.2字符类2.3分组2.4数量词3.正则表达式的执行方法C#正则表达式Regex......
  • python爬虫学习——re模块(正则表达式)
    正则表达式常用操作符.任何单个字符[]字符集,对单个字符给出取值范围[abc]、[a-z][^]非字符集,对单个字符给出排除范围[^abc]*对前一个字符0次或无限次拓......
  • Java 正则表达式详解
    总结:搜索(匹配):在一个字符串中搜索出一个或多个与正则表达式相匹配的子字符串。搜索又分为匹配和子字符串搜索。匹配是对用户所提供的整个字符串进行判断,看其是否匹......
  • python lambda表达式
    lambda表达式是一行函数。它们在其他语言中也被称为匿名函数。如果你不想在程序中对一个函数使用两次,你也许会想用lambda表达式,它们和普通的函数完全一样。Lambda表达式......
  • python正则表达式替换所有内容并同时保留找到的内容
    除了一些专业的工具,例如ue,大部分变成语言的函数包都挺让人迷惑的。因为的确有许多功能是很常用的,但是他们又不提供,非得要程序员自己去实现,或者是利用三方的包.例如我们会......
  • 第二十六天 购物车补充以及正则表达式
    一、购物车内容补充需要注意注释中的内容@login_authdefcheck_shop_car():file_path=os.path.join(db_path,'%s.json'%is_login.get('username'))with......
  • Lambda表达式与StreamAPI
    Lambda表达式与StreamAPIAuthor:MsuenbDate:2023-02022函数式编程思想面向对象过分强调"必须通过对象的形式来做事情",而函数式思想则是尽量忽略面向对象的复杂语......
  • corn表达式
    cron表达式 原文链接:https://blog.51cto.com/dpjcn1990/29790301.前言最近工作(公司项目执行任务用到了这个,设置定时定点执行某一个计划任务)上用到了cron表达式,所......
  • 常用的正则表达式
    java中//正则表达式验证身份证Stringidcard="/(^\\d{15}$)|(^\\d{18}$)|(^\\d{17}(\\d|X|x)$)/";booleanidcardB=testIdcard.matches(idcar......
  • Java国际化号码验证方法,国内手机号正则表达式
    Java国际化号码验证方法,国内手机号正则表达式 中国电信号段133、149、153、173、177、180、181、189、199中国联通号段130、131、132、145、155、156、166、175、17......