数据结构栈的引用计算表达式

    xiaoxiao2025-04-09  12

    

    #include<stdio.h> #include<stack> #include<string.h> #include<iostream> int flag=0; using namespace std; #define N 10010 int pri(char c) {     if(c=='('){         return 3;        }     else if(c=='+'||c=='-')         return 1;     else         return 2; } stack<int> data; stack<char> fu; void compu() {     char cc=fu.top();     fu.pop();     int num,a,b;     b=data.top();     data.pop();     a=data.top();     data.pop();     if(cc=='+')         num=a+b;     else if(cc=='-')         num=a-b;     else if(cc=='*')         num=a*b;     else         num=a/b;     data.push(num); } int jisuan(char a[]) {     int len=strlen(a);     for(int i=0;i<len;i++){

            if(a[i]>='0'&&a[i]<='9'){             int num=a[i]-'0',j;             for(j=i+1;a[j]>='0'&&a[j]<='9'&&j<len;j++){                 num=num*10+a[j]-'0';             }             if(flag==1){                 num=-num;                 flag=0;             }             data.push(num);             i=j-1;         }         else {             if(a[i]=='-'&&(a[i+1]>='0'&&a[i+1]<='9')&&(!(a[i-1]>='0'&&a[i-1]<='9')||a[i-1]=='0'))             {flag=1;             continue;             }             if(fu.size()==0){                 fu.push(a[i]);             }             else{                 char f1=fu.top();                 if(a[i]==')'){                     while(fu.top()!='('){                             compu();                           }                 fu.pop();                 }                else if(pri(a[i])<=pri(f1)&&f1!='('){                     compu();                     fu.push(a[i]);                 }                 else                     fu.push(a[i]);             }         }     }     while(fu.size()){         compu();     }     int res=data.top();     data.pop();     return res; } int main() {     char a[N];     while(scanf("%s",a)!=EOF){         cout<<jisuan(a)<<endl;     } }

    转载请注明原文地址: https://ju.6miu.com/read-1297891.html
    最新回复(0)