| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 481 人关注过本帖
标题:关于中缀转后缀表达式的小问题、
只看楼主 加入收藏
逝灬丿
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2013-2-5
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:12 
关于中缀转后缀表达式的小问题、
程序代码:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
main()
{
  int i=0,j=0; //i控制临时栈最高点,J控制输出栈
  int k=0; //临时栈的数量
  char *p;
  char str[100];//读入字符串
  int str2[100];//临时栈
  char str3[100];//输出栈
  scanf("%s",str);
  for(p=str;;p++)//指向原字符
  {
    if(*p>='0'&&*p<='9')
      str3[j++]=*p; //将那个数字放入输出栈
    else 
    {
      if(*p=='+') {str2[i++]=11;k++;}
      else if(*p=='-') {str2[i++]=12;k++;}
      else if(*p=='*') {str2[i++]=21;k++;}
      else if(*p=='/') {str2[i++]=22;k++;}//i已经指向下一个
      else ;//?+-*/方便取余表示先后级
      if(*p=='\0')
      {
        if(str2[0]==11) str3[j]='+';
        else if(str2[0]==12) str3[j]='-';
        else if(str2[0]==21) str3[j]='*';
        else if(str2[0]==22) str3[j]='/';
        else;
        break;
      }
      else if(k>=2)
      {
        if(str2[i-2]/10<str2[i-1]/10) //比较运算先后若同级或者后者大于前者
        {
          p++;
          if(*p>='0'&&*p<='9')
            str3[j++]=*p; //将那个数字放入输出栈
          if(str2[i-1]==21) {str3[j++]='*';i--;k--;}//将后一个放入输出栈
          else if(str2[i-1]==22) {str3[j++]='/';i--;k--;}
          else;                                      //i指回原来最高位子
          if(str2[i-2]==11) {str3[j++]='+';i--;k--;} //下次直接覆盖
          else if(str2[i-2]==12) {str3[j++]='-';i--;k--;}  
          else;                                      
        }
        else if(str2[i-2]/10>=str2[i-1]/10)
        {
        if(str2[i-2]==21) {str3[j++]='*';i--;k--;}//将前一个放入输出栈
        else if(str2[i-2]==22) {str3[j++]='/';i--;k--;}//i指回原来最高位子
        else if(str2[i-2]==11) {str3[j++]='+';i--;k--;} //下次直接覆盖
        else if(str2[i-2]==12) {str3[j++]='-';i--;k--;}  
        else;
        str2[i-1]=str2[i];
        }
      }
    }
  }
  for(p=str3;*p!='\0';p++)
    printf("%c ",*p);
  getch();
  return 0;
}
自己编写的一段中缀表达式转换为后缀表达式的程序(不支持括号),运行完后老是出现多余的俩符号,请高手看看哪里出错了
搜索更多相关主题的帖子: 表达式 
2013-02-10 13:39
逝灬丿
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2013-2-5
收藏
得分:0 
附上一张图
图片附件: 游客没有浏览图片的权限,请 登录注册

就是这后面俩符号怎么出来的

[ 本帖最后由 逝灬丿 于 2013-2-10 13:42 编辑 ]

QQ截图20130210134018.png (4.04 KB)
图片附件: 游客没有浏览图片的权限,请 登录注册
2013-02-10 13:41
心灯甚亮
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:441
专家分:996
注 册:2013-1-29
收藏
得分:20 
是处理综合运算式的吧

[ 本帖最后由 心灯甚亮 于 2013-2-10 14:22 编辑 ]
2013-02-10 14:19
心灯甚亮
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:441
专家分:996
注 册:2013-1-29
收藏
得分:0 
问题暂时没解决,倒是建议把那一堆if,else if,else改成switch
2013-02-10 14:25
心灯甚亮
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:441
专家分:996
注 册:2013-1-29
收藏
得分:0 
由于str3不是全局变量,编译器不会自动帮你初始化它,数组里的值是不确定的
只需要char str3[100]={'\0'};即可(对数组里一个元素初始化后,其他元素编译器会自动清零)

[ 本帖最后由 心灯甚亮 于 2013-2-10 15:03 编辑 ]
2013-02-10 14:57
心灯甚亮
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:441
专家分:996
注 册:2013-1-29
收藏
得分:0 
你把数拆成字符了,这种处理方式只能对一位数使用
2013-02-10 15:16
逝灬丿
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2013-2-5
收藏
得分:0 
回复 6楼 心灯甚亮
对哦。谢谢提醒
2013-02-10 15:56
逝灬丿
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2013-2-5
收藏
得分:0 
回复 6楼 心灯甚亮
直接在读到运算符之后就放一个空格到str3中应该就可以了吧,然后用%s输出
2013-02-10 15:58
逝灬丿
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2013-2-5
收藏
得分:0 
回复 5楼 心灯甚亮
原来定义数组之后加个={'\0'}是这个用啊、领教了、
2013-02-10 16:02
心灯甚亮
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:441
专家分:996
注 册:2013-1-29
收藏
得分:0 
如果最终目的只是输出后缀表达式的话你的方案可以,但是这样的话如果要运算是不方便滴,并且内存占用直接随着表达式的长度增长的(不过通常不必考虑这个问题)
2013-02-10 16:03
快速回复:关于中缀转后缀表达式的小问题、
数据加载中...
 
   



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

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