鱼C论坛

 找回密码
 立即注册
查看: 3981|回复: 3

关于 后缀表达式的运算问题

[复制链接]
发表于 2013-4-23 22:31:37 | 显示全部楼层 |阅读模式
5鱼币
我想计算3+6的和 怎么结果是105呢?
#include <iostream.h>
#define MAX 100
typedef  struct
  {
        int  data[MAX];
    int  top;
  }SeqStack;      

SeqStack *Init_SeqStack()   
{     
  SeqStack  *s;
  s=new SeqStack; 
  if (!s)
    { 
      return NULL;    
    }
  else
    { 
          s->top=-1;     
      return s;     
    }
}

int Empty(SeqStack *s){  
  if (s->top==-1)
    return 1;   
  else
    return 0;
}

int Push_SeqStack(SeqStack *s,int  x){   
  if (s->top==MAX-1)
    return 0; 
  else
    { s->top++; 
      s->data[s->top]=x; 
      return 1; 
    }
}

int Pop_SeqStack(SeqStack *s,int *x){     
  if (Empty(s))
    return 0;  
  else
    { *x=s->data[s->top];  
       s->top--;    
       return 1;       
    }
}

int GetTop(SeqStack *s)   
{  
  
    return(s->data[s->top]);  
}

/*****/
double calcul_exp(char *A)
{
        SeqStack *s;
        
        char ch ;
        s = Init_SeqStack();
        int a = 0,b = 0,c = 0;
        while(ch != '#')
        {
                if(ch != '+' && ch != '-' &&ch != '*' &&ch != '/' )
                
                        Push_SeqStack(s,ch);
                        else
                        {
                                Pop_SeqStack(s,&b);
                                Pop_SeqStack(s,&a);
                                switch(ch)
                                {
                                        case '+': c = a + b;break;
                                        case '-': c = a - b;break;
                                        case '*': c = a * b;break;
                                        case '/': c = a / b;break;

                                }
                                Push_SeqStack(s,c);
                        }
                        ch = *A++;
                
        }
        Pop_SeqStack(s,&c);
        return c;
}

void main()
{
    char a[10] = "36+#";
        double mn = calcul_exp(a);
        cout << mn;
}
QQ截图20130423223044.jpg

最佳答案

查看完整内容

有几处问题,在你的基础上改了一下,仅供参考:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-4-23 22:31:38 | 显示全部楼层
有几处问题,在你的基础上改了一下,仅供参考:
#include <iostream>
using namespace std;
#define MAX 100
typedef  struct
{
        int  data[MAX];
        int  top;
}SeqStack;      

SeqStack *Init_SeqStack()   
{     
        SeqStack  *s;
        s=new SeqStack; 
        if (!s)
        { 
                return NULL;    
        }
        else
        { 
                s->top=-1;     
                return s;     
        }
}

int Empty(SeqStack *s){  
        if (s->top==-1)
                return 1;   
        else
                return 0;
}

int Push_SeqStack(SeqStack *s,int  x){   
        if (s->top==MAX-1)
                return 0; 
        else
        { 
                s->top++; 
            s->data[s->top]=x; 
            return 1; 
        }
}

int Pop_SeqStack(SeqStack *s,int *x){     
        if (Empty(s))
                return 0;  
        else
        { 
                *x=s->data[s->top]; 
                s->top--; 
                return 1;       
        }
}

int GetTop(SeqStack *s)   
{  

        return(s->data[s->top]);  
}

/*****/
double calcul_exp(char *A)
{
        SeqStack *s;

        char ch ;
        s = Init_SeqStack();
        int a = 0,b = 0,c = 0;
        ch=*A;
        while(ch != '#')
        {
                if(ch != '+' && ch != '-' &&ch != '*' &&ch != '/' )
                {
                        int i = atoi((const char *)&ch);
                        Push_SeqStack(s,i);
                }
                else
                {
                        Pop_SeqStack(s,&b);
                        Pop_SeqStack(s,&a);
                        switch(ch)
                        {
                        case '+': c = a + b;break;
                        case '-': c = a - b;break;
                        case '*': c = a * b;break;
                        case '/': c = a / b;break;

                        }
                        Push_SeqStack(s,c);
                }
                A++;
                ch = *A;

        }
        Pop_SeqStack(s,&c);
        return c;
}

void main()
{
        char a[10] = "36+#";
        double mn = calcul_exp(a);
        cout << mn;
        getchar();
}
1.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-4-25 12:51:24 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-4-25 12:57:01 | 显示全部楼层
小新110 发表于 2013-4-24 13:36
有几处问题,在你的基础上改了一下,仅供参考:
if(ch != '+' && ch != '-' &&ch != '*' &&ch != '/' )
哦 我知道了 把 改成
if (ch != 字符)
就可以了吧。。。。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 18:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表