这个代码啥意思???
  • 板块灌水区
  • 楼主neofreeflyer
  • 当前回复8
  • 已保存回复8
  • 发布时间2024/8/26 20:47
  • 上次更新2024/8/26 23:21:07
查看原帖
这个代码啥意思???
616906
neofreeflyer楼主2024/8/26 20:47
-------------------------------
#include <bits/stdc++.h>

using namespace std;

char OP[7] = {'+','-','*','/','(',')','#'};

char oppred[7][7] = {
{'>','>','<','<','<','>','>'},
{'>','>','<','<','<','>','>'},
{'>','>','>','>','<','>','>'},
{'>','>','>','>','<','>','>'},
{'<','<','<','<','<','=','X'},
{'>','>','>','>','X','>','>'},
{'<','<','<','<','<','X','='}};

bool isop(char ch)
{
  for(int i = 0; i < 7; ++i)
  {
    if(ch == OP[i]) return true;
  }
  return false;
}

void changeindex(char ch,int &i)
{
  switch(ch)
  {
    case '+': i = 0; break;
    case '-': i = 1; break;
    case '*': i = 2; break;
    case '/': i = 3; break;
    case '(': i = 4; break;
    case ')': i = 5; break;
    case '#': i = 6; break;
  }
}

char Precede(char ch1,char ch2)
{
  int i,j;
  changeindex(ch1,i);
  changeindex(ch2,j);
  return oppred[i][j];
}

int Operate(int a,char op,int b)
{
  switch(op)
  {
    case '+': return a + b; break;
    case '-': return a - b; break;
    case '*': return a * b; break;
    case '/': return a / b; break;
    default: return 0;
  }
}

int main()
{
  stack<int> OPEN;
  stack<char> OPTR;
  char ch = getchar();

  OPTR.push('#');
  while(ch != '#'|| OPTR.top() != '#')
  {
    if(!isop(ch))
    {
      int num = ch - '0'; ch = getchar();
      while(not isop(ch))
      {
       num = num * 10 + ch - '0';
       ch = getchar();
      }
      OPEN.push(num); continue;
    }
    else
    {
      switch(Precede(OPTR.top(),ch))
      {
        case '<':
          OPTR.push(ch);
          ch = getchar();
          break;  
        case '=':
          OPTR.pop();
          ch = getchar();
          break;
        case '>':
          char op = OPTR.top();
          OPTR.pop();
          int b = OPEN.top();
          OPEN.pop();
          int a = OPEN.top();
          OPEN.pop();
          OPEN.push(Operate(a,op,b));
      }
    }
  }
  cout << OPEN.top() << endl;
  return 0;
}
--------------------------------

有没有dalao知道这个代码是做什么的

2024/8/26 20:47
加载中...