中缀表达式运算

//仅含加减乘除

#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;
}

 


posted @ 2022-01-26 22:05  jetaim  阅读(44)  评论(0)    收藏  举报