用栈实现表达式计算

本文深入探讨了AI音视频处理领域中的视频分割与语义识别技术,介绍了视频分割的基本概念、常见算法及其在实际应用中的案例。同时,详细解释了语义识别的过程、关键步骤和技术挑战,并分享了该技术在自动驾驶、AR等领域中的应用实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <stdio.h>
002#include <ctype.h>
003#include <string.h>
004int num[100];
005char op[100];
006int numcou = 0;
007int opcou = 0;
008void pushnum(int n)
009{
010num[numcou++] = n;
011}
012void pushop(char c)
013{
014op[opcou++] = c;
015}
016int numpop()
017{
018return num[--numcou];
019}
020char oppop()
021{
022return op[--opcou];
023}
024char opc[7] = {'+', '-', '*', '/', '(', ')', '#'};
025int p[7][7] = {
026{1,1,-1,-1,-1,1,1},
027{1,1,-1,-1,-1,1,1},
028{1,1,1,1,-1,1,1},
029{1,1,1,1,-1,1,1},
030{-1,-1,-1,-1,-1,0,-2},
031{1,1,1,1,-2,1,1},
032{-1,-1,-1,-1,-1,-2,0}
033};
034int pri(char s, char e)
035{
036int i, j, k;
037for (i=0; i<7; i++)
038{
039   if (s == opc[i])
040    j = i;
041   if (e == opc[i])
042   {
043    k = i;
044   }
045}
046return p[j][k];
047}
048int result(int first, int second, char c)
049{
050switch(c)
051{
052case '+':
053   return first + second;
054   break;
055case '-':
056   return first - second;
057   break;
058case '*':
059   return first * second;
060   break;
061case '/':
062   return first / second;
063   break;
064}
065}
066int calc(char *exp)
067{
068char c;
069int first;
070int second;
071numcou = 0;
072opcou = 0;
073pushop('#');
074while (*exp!='#' || op[opcou-1]!='#')
075{
076   if (isdigit(*exp))
077   {
078    pushnum(*exp-'0');
079    exp++;
080    continue;
081   }
082   else if (isalpha(*exp))
083   {
084    pushnum(*exp-'a'+10);
085    exp++;
086    continue;
087   }
088   else if (*exp=='+' || *exp=='-' || *exp=='*' || *exp=='#' || *exp=='(' || *exp==')')
089   {
090    switch(pri(op[opcou-1], *exp))
091    {
092    case 1:
093     c = oppop();
094     second = numpop();
095     first = numpop();
096     pushnum(result(first, second, c));
097     break;
098    case 0:
099     oppop();
100     exp++;
101     break;
102    case -1:
103     pushop(*exp);
104     exp++;
105     break;
106    default:
107     break;
108    }
109   }
110   else
111    exp++;
112    
113}
114return num[numcou-1];
115}
116int main()
117{
118int n, len;
119char fir[100], sec[100];
120while (scanf("%d", &n)!=EOF)
121{
122   getchar();
123   while (n--)
124   {
125 
126    gets(fir);
127    len = strlen(fir);
128    fir[len] = '#';
129    gets(sec);
130    len = strlen(sec);
131    sec[len] = '#';
132    if (calc(fir) == calc(sec))
133     printf("YES\n");
134    else
135     printf("NO\n");
136   }
137}
138return 0;
139}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值