| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 397 人关注过本帖
标题:怎么去计算一个表达式
只看楼主 加入收藏
小小小火柴
Rank: 5Rank: 5
来 自:江西赣州
等 级:职业侠客
威 望:3
帖 子:141
专家分:337
注 册:2012-9-28
结帖率:90.91%
收藏
已结贴  问题点数:20 回复次数:2 
怎么去计算一个表达式
  这是一个有用的中缀表达式转换成后缀表达式的程序。关键是转换之后,我应该怎么利用我转换出来的后缀表达式去计算一个式子?

 有帮我修改,加点东西进去的吗?


#include<iostream.h>
const maxsize=1000;
char s1[maxsize],s2[maxsize],s3[maxsize];     //分别存放中,后缀表达式
class seqstack                    //定义顺序栈
{
    public:
        char stack[maxsize];
        int top;
        void inistack()           //栈的初始化
        {
           top=0;
        }
        void push(char x)         //进栈
        {
           top++;
           stack[top]=x;
        }
        void pop()               //退栈
        {
           top--;
        }
        char gettop()             //取栈顶元素
        {
           return stack[top];
        }
        bool empty()              //判栈空
        {
           if(top==0)
               return true;
           else
               return false;
        }
        int oper(char op)           //返回运算符的优先级
        {
           switch(op)
           {
           case '+':case '-':return 1;
           case '*':case '/':return 2;
           case '(':return 0;
           default:return 0;
           }
        }
void change()                 //中缀转换成等价的后缀表达式
{
            char y,ch;
            int top=0;
            inistack();
            push('@');
            int i=0,j=0;
            ch=s1[i];
            while(ch!='@')
            {
                if(ch==' ')
                    ch=s1[++i];
                else if(ch=='(')        //遇左括号进栈
                {
                    push(ch);
                    ch=s1[++i];
                }
                else if(ch==')')        //遇右括号退栈,直到遇到左括号
                {
                    y=gettop();
                    while(y!='(')
                    {
                        s2[j++]=y;
                        s2[j++]=' ';
                        pop();
                        y=gettop();
                    }
                    pop();
                    ch=s1[++i];
                }
                else if((ch=='+')||(ch=='-')||(ch=='*')||(ch=='/'))
                {
                    y=gettop();
                    if(oper(ch)>oper(y))
                    {
                        push(ch);
                        ch=s1[++i];
                    }
                    else
                    {
                        y=gettop();
                        s2[j++]=y;
                        s2[j++]=' ';
                        pop();
                    }
                }
               else
               {
                while(((ch>='0')&&(ch<='9'))||(ch=='.'))
                {
                    s2[j++]=ch;
                    ch=s1[++i];
                }
                s2[j++]=' ';
               }
            }
            y=gettop();
            while(y!='@')
            {
                s2[j++]=y;
                s2[j++]=' ';
                pop();
                y=gettop();
            }
            s2[j]='@';
}
};
void main()
{
    seqstack s;
    char ch;
    int i=0;
    int m[100];
    cout<<"请输入中缀表达式(以'@'结尾):";
    cin>>ch;
    while(ch!='@')
    {
        s1[i++]=ch;
        cin>>ch;
    }
    s1[i]='@';
    cout<<"中缀表达式为:";
    for(int j=0;j<i;j++)
        cout<<s1[j];
    cout<<endl;
    s.change();
    cout<<"后缀表达式为:";
    j=0;
    while(s2[j]!='@')
    {
        cout<<s2[j];
        j++;
    }
    cout<<endl;
}
搜索更多相关主题的帖子: 计算 include public 表达式 
2013-01-05 14:12
w527705090
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:11
帖 子:441
专家分:1882
注 册:2011-6-28
收藏
得分:10 
帮顶了。。。这个还真不知道。。。。

有心者,千方百计;无心者,千难万难。
2013-01-06 15:19
liqingqinger
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:69
专家分:163
注 册:2013-1-2
收藏
得分:10 
怎么都是一大串  痷级别布够

求布喷。。。
我是菜鸟。。。。。
2013-01-06 19:34
快速回复:怎么去计算一个表达式
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021074 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved