(包括嵌套函数的)表达式中缀转后缀问题 ( 积分: 150 )

魏红

Unregistered / Unconfirmed
GUEST, unregistred user!
含有嵌套的函数(参数不止一个),嵌套的层数也事先未知,但特定函数的参数个数事先知道.
转换的规则是:函数的参数项依次排列,表达式按规则转换,函数名称放在参数项后面.
举例如下:
中缀表达式 fun1(a1,a2+a3,fun2(sin(a+b*t)))+c*d
转换后表达式 a1 a2 a3 + a b t * + sin fun2 fun1 c d * +
1、请写出算法(最好用栈)
2、给出pascal代码
 
含有嵌套的函数(参数不止一个),嵌套的层数也事先未知,但特定函数的参数个数事先知道.
转换的规则是:函数的参数项依次排列,表达式按规则转换,函数名称放在参数项后面.
举例如下:
中缀表达式 fun1(a1,a2+a3,fun2(sin(a+b*t)))+c*d
转换后表达式 a1 a2 a3 + a b t * + sin fun2 fun1 c d * +
1、请写出算法(最好用栈)
2、给出pascal代码
 
上面要涉及到运算符优先顺序查找表。
给你提供一下。其他的你慢慢弄。
Var
SearchTable:array[Char,Char] of Char;
SearchTable['+','+']:='>';
SearchTable['-','+']:='>';
SearchTable['*','+']:='>';
SearchTable['/','+']:='>';
SearchTable['(','+']:='<';
SearchTable[')','+']:='>';
SearchTable[',','+']:=' ';
SearchTable['#','+']:='<';
SearchTable['+','-']:='>';
SearchTable['-','-']:='>';
SearchTable['*','-']:='>';
SearchTable['/','-']:='>';
SearchTable['(','-']:='<';
SearchTable[')','-']:='>';
SearchTable[',','-']:=' ';
SearchTable['#','-']:='<';
SearchTable['+','*']:='<';
SearchTable['-','*']:='<';
SearchTable['*','*']:='>';
SearchTable['/','*']:='>';
SearchTable['(','*']:='<';
SearchTable[')','*']:='>';
SearchTable[',','*']:=' ';
SearchTable['#','*']:='<';
SearchTable['+','/']:='<';
SearchTable['-','/']:='<';
SearchTable['*','/']:='>';
SearchTable['/','/']:='>';
SearchTable['(','/']:='<';
SearchTable[')','/']:='>';
SearchTable[',','/']:=' ';
SearchTable['#','/']:='<';
SearchTable['+','(']:='<';
SearchTable['-','(']:='<';
SearchTable['*','(']:='<';
SearchTable['/','(']:='<';
SearchTable['(','(']:='<';
SearchTable[')','(']:=' ';
SearchTable[',','(']:=' ';
SearchTable['#','(']:='<';
SearchTable['+','(']:='>';
SearchTable['-',')']:='>';
SearchTable['*',')']:='>';
SearchTable['/',')']:='>';
SearchTable['(',')']:='=';
SearchTable[')',')']:='>';
SearchTable[',',')']:=' ';
SearchTable['#',')']:=' ';
SearchTable['+','#']:='>';
SearchTable['-','#']:='>';
SearchTable['*','#']:='>';
SearchTable['/','#']:='>';
SearchTable['(','#']:=' ';
SearchTable[')','#']:='>';
SearchTable[',','#']:=' ';
SearchTable['#','#']:='=';
 
用宏+栈来实现.代码已经发到你的信箱,请查收.
 
这个我会
不知楼主愿出多少money或多少分值
我给出的答案保证通用
楼主只要给出表达的运算规则(比如优先级、有几种运算类型)就可以了,至于嵌套几层、参数多少都是没问题的。
 
wangxiong:
谢谢.我正在试
 
多人接受答案了。
 

Similar threads

回复
0
查看
819
不得闲
S
回复
0
查看
956
SUNSTONE的Delphi笔记
S
S
回复
0
查看
779
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
顶部