中缀表达式运算
//仅含加减乘除
#include<bits/stdc++.h>
using namespace std;
int opt(int a,int b,char c)
{
if(c=='+') return a+b;
if(c=='-') return a-b;
if(c=='*') return a*b;
if(c=='/') return a/b;
}
int main()
{
char s[100];
int stack1[100];
char stack2[100];
int i,top1=0,top2=0;
bool flag;
cin>>s;
for(i=0;s[i];i++)
{
int t=0;
flag=0;
while(s[i]>='0' && s[i]<='9')
{
flag=1;
t=t*10+(s[i]-'0');
i++;
}
if(flag)
{
i--;
stack1[++top1]=t;
if(stack2[top2]=='*' || stack2[top2]=='/')
{
stack1[top1-1]=opt(stack1[top1-1],stack1[top1],stack2[top2]);
top1--;
top2--;
}
}
else
stack2[++top2]=s[i];
}
while(top2>0)
{
stack1[top1-1]=opt(stack1[top1-1],stack1[top1],stack2[top2]);
top1--;
top2--;
}
cout<<stack1[1];
return 0;
}
//含括号 #include<bits/stdc++.h> using namespace std; int opt(int a,int b,char c) { if(c=='+') return a+b; if(c=='-') return a-b; if(c=='*') return a*b; if(c=='/') return a/b; } int main() { char s[100]; int stack1[100]; char stack2[100]; int i,top1=0,top2=0; bool flag; cin>>s; for(i=0;s[i];i++) { int t=0; flag=0; while(s[i]>='0' && s[i]<='9') { flag=1; t=t*10+(s[i]-'0'); i++; } if(flag) { i--; stack1[++top1]=t; if(stack2[top2]=='*' || stack2[top2]=='/') { stack1[top1-1]=opt(stack1[top1-1],stack1[top1],stack2[top2]); top1--; top2--; } } else { if(s[i]==')') { while(stack2[top2]!='(') { stack1[top1-1]=opt(stack1[top1-1],stack1[top1],stack2[top2]); top1--; top2--; } top2--; } else stack2[++top2]=s[i]; } } while(top2>0) { stack1[top1-1]=opt(stack1[top1-1],stack1[top1],stack2[top2]); top1--; top2--; } cout<<stack1[1]; return 0; }

浙公网安备 33010602011771号