| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 881 人关注过本帖
标题:求大神帮忙!! 收藏 中缀表达式转化为后缀表达式 出错啊!!
取消只看楼主 加入收藏
h1023417614
Rank: 4
等 级:禁止访问
帖 子:211
专家分:237
注 册:2012-11-30
结帖率:100%
收藏
已结贴  问题点数:100 回复次数:4 
求大神帮忙!! 收藏 中缀表达式转化为后缀表达式 出错啊!!
加上括号就会出错;求解啊!!不加括号就ok!!
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

 
#define MAXzhansize 30
char stack[MAXzhansize];//
 
void add(int *top,char item)
{
    if(*top>=MAXzhansize)    
    {
    printf("jj\n");
        exit(1);
    }
    stack[++*top]=item;

 
}
char deleted(int *top)
{
    if(*top==-1)
    {
    printf("kk\n");
        exit(1);
    }
    return stack[(*top)--];
}

 

 

 
void main()
{
  int a[128];
  a['+']=1;///预备优先级
  a['-']=1;
  a['*']=2;
  a['/']=2;
  a['%']=2;
  a['(']=3;
  a[')']=0;
  a[',']=-1;
  
int top=-1,j=0,toptemp;//top始终是指向栈顶元素的
char b[30];
char c[30];
gets(b);
  
add(&top,',');// 最低优先级a[',']=-1;
 
for(int i=0;b[i]!='\0';++i)
{   
   if(!isdigit( b[i]) )///不是数字符号时
           {    
              if(b[i] == '(' )//前两个if语句 处理特殊情况 一对括号
              {
              add( &top, b[i] );continue;//直接加到栈里'('
              }

 
             if(b[i] == ')' )//处理一对括号       
              {
                 while( stack[top] != '(' )
                    c[j++]=deleted(&top);

 
                    deleted(&top);//除掉一个'('
                    continue;
              }

 
                    if(a[ b[i] ] > a[ stack[top] ])
        ////当前的符号优先级大于栈顶的符号是放入,,否则弹出栈顶..........
                    {
                        add( &top, b[i] );
                        continue;
                    }
                    else
                    {
                        while(a[ b[i] ] <= a[ stack[top] ])/////直到大于栈顶符号的优先级
                        c[j++]=deleted(&top);

 
                        add( &top, b[i] );continue;
                    }

 
            }

 
       else////是数字符号时
       {
         c[j++]=b[i];
       }

 
}

 

 
    while(top !=0 )/////栈里剩余的符号输出
        c[j++]=deleted(&top);

 
c[j++]='\0';////补上空字符
puts(c);

 

 

 
}
搜索更多相关主题的帖子: 表达式 收藏 color 
2013-04-01 12:51
h1023417614
Rank: 4
等 级:禁止访问
帖 子:211
专家分:237
注 册:2012-11-30
收藏
得分:0 
回复 4楼 laoyang103

这里到底怎么改啊

程序代码:
          if(b[i] == '(' )//前两个if语句 处理特殊情况 一对括号
              {
              add( &top, b[i] );continue;//直接加到栈里'('
              }

             if(b[i] == ')' )//处理一对括号       
              {
                 while( stack[top] != '(' )
                    c[j++]=deleted(&top);

                    deleted(&top);//除掉一个'('
                    continue;
              }
2013-04-01 16:26
h1023417614
Rank: 4
等 级:禁止访问
帖 子:211
专家分:237
注 册:2012-11-30
收藏
得分:0 
回复 5楼 azzbcc
怎么说
2013-04-01 16:37
h1023417614
Rank: 4
等 级:禁止访问
帖 子:211
专家分:237
注 册:2012-11-30
收藏
得分:0 
程序代码:
void main()
{
  int a[128];
  a['+']=1;///预备优先级
  a['-']=1;
  a['*']=2;
  a['/']=2;
  a['%']=2;
  a['(']=3;///////////////////////  a['(']=0;ok ok o kk ok oko kk 
  a[')']=0;
  a[',']=-1;
  

ok
2013-04-01 16:55
h1023417614
Rank: 4
等 级:禁止访问
帖 子:211
专家分:237
注 册:2012-11-30
收藏
得分:0 
回复 11楼 laoyang103
嗯!!!!
我在  c[j++]=deleted(&top);后面加上printf()语句用来跟踪上一条语句!!!!!然后..................!!

2013-04-01 22:38
快速回复:求大神帮忙!! 收藏 中缀表达式转化为后缀表达式 出错啊!!
数据加载中...
 
   



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

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