为什么出错
  • 板块灌水区
  • 楼主Alea
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/1/17 20:07
  • 上次更新2023/10/24 03:48:24
查看原帖
为什么出错
322792
Alea楼主2023/1/17 20:07
#include <iostream>
#include <string>
#include <stack>
#include <map>
#include <sstream>
using namespace std;
int main(){
    string exp;
    map<char,int> prior;
    prior['+']=prior['-']=1,prior['*']=prior['/']=2;
    cin>>exp;
    exp="("+exp+")";
    stack<char> ops;
    struct term{int num;char ch='\0';}suffexp[101]={};
    int u=0;
    for(size_t i=0;i<exp.length();i++){
        if(exp[i]=='(') ops.push(exp[i]);
        else if(exp[i]==')'){
            while(!ops.empty()&&ops.top()!='(') suffexp[++u].ch=ops.top(),ops.pop();
            ops.pop();
        }else if(((exp[i]=='+'||exp[i]=='-')&&exp[i-1]=='('&&(exp[i+1]>='0'&&exp[i+1]<='9'))||(exp[i]>='0'&&exp[i]<='9')){
            int neg=1,absnum=0,num=0;
            if(exp[i]=='+'||exp[i]=='-'){
                neg=(exp[i]=='+'?1:-1);
                for(int j=i+1;exp[j]>='0'&&exp[j]<='9';j++) absnum=absnum*10+exp[j]-'0',i=j;
                num=absnum*neg;
            }else for(int j=i;exp[j]>='0'&&exp[j]<='9';j++) num=num*10+exp[i=j]-'0';
            suffexp[++u].num=num;
        }else{
            while(!ops.empty()&&ops.top()!='('&&prior[ops.top()]>prior[exp[i]]) suffexp[++u].ch=ops.top(),ops.pop();
            ops.push(exp[i]);
        }
    }
    stack<int> nums;
    for(int i=1;i<=u;i++){
        if(!suffexp[i].ch) nums.push(suffexp[i].num);
        else{
            int a=nums.top();nums.pop();
            int b=nums.top();nums.pop();
            if(suffexp[i].ch=='+') nums.push(a+b);
            if(suffexp[i].ch=='*') nums.push(a*b);
            if(suffexp[i].ch=='-') nums.push(b-a);
        }
    }
    cout<<nums.top()<<endl;
    return 0;
}

这是一道表达式求值,但是为什么它RE了?

2023/1/17 20:07
加载中...