| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 695 人关注过本帖, 1 人收藏
标题:高手帮忙作一道题呗
只看楼主 加入收藏
白雪纷纷
Rank: 1
等 级:新手上路
帖 子:23
专家分:6
注 册:2010-10-24
结帖率:20%
收藏(1)
已结贴  问题点数:20 回复次数:9 
高手帮忙作一道题呗
输入一数学表达式的字符串,输出该表达式值(不考虑先乘除后加减).例:输入:2*3+4/5-6   输出:-4
高手可一定要露脸啊!
收到的鲜花
  • 你们都要疼我哦2010-12-08 16:06 送鲜花  -5朵   附言:加减乘除啊 太复杂,先减减再说
搜索更多相关主题的帖子: 表达式 字符串 数学 
2010-12-01 15:43
vandychan
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
等 级:贵宾
威 望:18
帖 子:2296
专家分:6418
注 册:2010-8-20
收藏
得分:3 
这种计算器啊

到底是“出来混迟早要还”还是“杀人放火金腰带”?
2010-12-01 15:44
逍遥KO
Rank: 2
等 级:论坛游民
帖 子:3
专家分:12
注 册:2010-11-22
收藏
得分:3 
不如分部计算。。。。
2010-12-01 16:57
fightingsss
Rank: 6Rank: 6
等 级:侠之大者
帖 子:97
专家分:471
注 册:2010-11-12
收藏
得分:3 
输入的是一个数字,一个计算符号的吧!
2010-12-03 12:17
白雪纷纷
Rank: 1
等 级:新手上路
帖 子:23
专家分:6
注 册:2010-10-24
收藏
得分:0 
拜托,不要说的这么朦胧好不好?!
2010-12-08 10:11
xieshen947
Rank: 2
等 级:论坛游民
帖 子:58
专家分:65
注 册:2010-9-4
收藏
得分:3 
穷举
每个空位有4种可能
N个数字,就是4^N次方
2010-12-08 10:14
fy7518716
Rank: 2
等 级:论坛游民
帖 子:8
专家分:24
注 册:2008-6-17
收藏
得分:3 
我以前写的代码,没注释,慢慢看吧。还支持括号。关键是栈的使用,我用来两个栈,一个是存数字的,一个是存运算符的。
程序是为在window下写的,现在用linux发的,部分中文是乱码。不过不影响,都是些提示性的语句,想运行自己改改。
程序代码:
#include<iostream.h>

typedef struct

{

    int num[10];

    int top;

}numStack;



typedef struct

{

    char ch[10];

    int top;

}charStack;



void InitnStack(numStack &ns)

{

    ns.top=-1;

}



void InitcStack(charStack &cs)

{

    cs.top=0;

    cs.ch[0]='#';

}



bool iscEmpty(charStack cs)

{

    if(cs.top==0)return true;

    else return false;

}



void numPush(numStack &ns,int n)

{

    ns.top++;

    ns.num[ns.top]=n;

}



void charPush(charStack &cs,char n)

{

    cs.top++;

    cs.ch[cs.top]=n;

}



int numPop(numStack &ns)

{

    ns.top--;

    return ns.num[ns.top+1];

}



char charPop(charStack &cs)

{

    cs.top--;

    return cs.ch[cs.top+1];

}



int getnTop(numStack ns)

{

    return ns.num[ns.top];

}



char getcTop(charStack cs)

{

    return cs.ch[cs.top];

}



int IsChar(char c)

{

    switch(c)

    {

    case '+':return 1;break;

    case '-':return 2;break;

    case '*':return 3;break;

    case '/':return 4;break;

    case '#':return 5;break;

    case '(':return 6;break;

    case ')':return 7;break;

    default:return 0;break;

    }

}



int IsNum(char c)

{

    switch(c)

    {

    case '0':return 0;

    case '1':return 1;

    case '2':return 2;

    case '3':return 3;

    case '4':return 4;

    case '5':return 5;

    case '6':return 6;

    case '7':return 7;

    case '8':return 8;

    case '9':return 9;

    default:return 10;

    }

}





bool translate(char s[],numStack &ns,charStack &cs)

{

    int i=0,m,n;

    InitnStack(ns);

    InitcStack(cs);

    while(s[i]!='\0')

    {

        switch(IsChar(s[i]))

        {

        case 7:

            {

                while(getcTop(cs)!='(')

                {

                    switch(IsChar(charPop(cs)))

                    {

                    case 1:m=numPop(ns);n=numPop(ns);numPush(ns,n+m);break;

                    case 2:m=numPop(ns);n=numPop(ns);numPush(ns,n-m);break;

                    case 3:m=numPop(ns);n=numPop(ns);numPush(ns,n*m);break;

                    case 4:m=numPop(ns);n=numPop(ns);numPush(ns,n/m);break;

                    }

                }

                charPop(cs);

                i++;

                break;

            }

        case 6:charPush(cs,s[i]);i++;break;

        case 1:

            {

                while(IsChar(getcTop(cs))!=1&&IsChar(getcTop(cs))!=5&&IsChar(getcTop(cs))!=6)

                {

                    switch(IsChar(getcTop(cs)))

                    {

                    case 2:charPop(cs);m=numPop(ns);n=numPop(ns);numPush(ns,n-m);break;

                    case 3:charPop(cs);m=numPop(ns);n=numPop(ns);numPush(ns,n*m);break;

                    case 4:charPop(cs);m=numPop(ns);n=numPop(ns);numPush(ns,n/m);break;

                    }

               


                }   


                charPush(cs,s[i]);   


                i++;

                break;

            }

        case 2:

            {

                while(IsChar(getcTop(cs))!=1&&IsChar(getcTop(cs))!=5&&IsChar(getcTop(cs))!=6)

                {

                    switch(IsChar(getcTop(cs)))

                    {

                    case 2:charPop(cs);m=numPop(ns);n=numPop(ns);numPush(ns,n-m);break;

                    case 3:charPop(cs);m=numPop(ns);n=numPop(ns);numPush(ns,n*m);break;

                    case 4:charPop(cs);m=numPop(ns);n=numPop(ns);numPush(ns,n/m);break;

                    }

                }   


                charPush(cs,s[i]);

                i++;

                break;

            }

        case 3:

            {

                while(IsChar(getcTop(cs))!=1&&IsChar(getcTop(cs))!=5&&IsChar(getcTop(cs))!=2&&IsChar(getcTop(cs))!=3&&IsChar(getcTop(cs))!=6)

                {

                    charPop(cs);m=numPop(ns);n=numPop(ns);numPush(ns,n/m);break;   


                }

                charPush(cs,s[i]);

                i++;

                break;

            }

        case 4:charPush(cs,s[i]);i++;break;

        case 0:

            {

                int num=0;

                while(IsChar(s[i])==0)

                {

                    if(IsNum(s[i])==10)

                    {

                        if(s[i]!='\0')

                        {

                            cout<<"ÊäÈëÓÐÎó£¡"<<endl;

                            return false;

                        }

                        else


                            break;

                    }

                    else

                    {

                        m=IsNum(s[i]);

                        num=10*num+m;

                        i++;

                    }

                }

            //    cout<<m<<endl;

                numPush(ns,num);

                break;



            }

       


        }

       


    }

    return true;

}





int calculate(numStack &ns,charStack &cs)

{

    int m,n;

    while(!iscEmpty(cs))

    {

        switch(IsChar(charPop(cs)))

        {

        case 1:m=numPop(ns);n=numPop(ns);numPush(ns,n+m);break;

        case 2:m=numPop(ns);n=numPop(ns);numPush(ns,n-m);break;

        case 3:m=numPop(ns);n=numPop(ns);numPush(ns,n*m);break;

        case 4:m=numPop(ns);n=numPop(ns);numPush(ns,n/m);break;

        case 6:cout<<"ÀšºÅ²»Æ¥Å䣡"<<endl;return 0;

        }

    }

    return numPop(ns);

}









void main()

{

    while(1)

    {

        char a[20];

        cin>>a;

        if(a[0]=='E')

            return;

        else {

            numStack ns;

            charStack cs;

            InitnStack(ns);

            InitcStack(cs);

            if(translate(a,ns,cs)==true)

            {

                cout<<"------------------"<<endl;

                cout<<a<<"="<<calculate(ns,cs)<<endl;

            }

        }

        cout<<"ÊäÈëEÍ˳ö"<<endl;

        cout<<endl;

    }

}

2010-12-08 15:30
a343637412
Rank: 7Rank: 7Rank: 7
来 自:そ ら
等 级:黑侠
帖 子:357
专家分:620
注 册:2010-9-26
收藏
得分:3 
楼上....的代码好长...
2010-12-08 16:01
白雪纷纷
Rank: 1
等 级:新手上路
帖 子:23
专家分:6
注 册:2010-10-24
收藏
得分:0 
哇,天.......有这么复杂吗?
2010-12-12 14:44
abc3210cba
Rank: 2
等 级:论坛游民
帖 子:63
专家分:97
注 册:2010-9-26
收藏
得分:0 
数据结构的教材里有栈的使用,编译原理教材里也有
2010-12-12 15:29
快速回复:高手帮忙作一道题呗
数据加载中...
 
   



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

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