求完整能运行程序!
考虑 + - * /四个运算符和()各类情况。
只要matlab的!
写了个函数:
function strStack=in2postFix(strFunc)
symStack='';
strStack='';
strLast='';
for i=1:length(strFunc)
strTemp=strFunc(1);
strFunc(1)=[];
if isstrprop(strTemp,'digit')
if ~isempty(strStack)&&~isstrprop(strStack(end),'digit')
strStack=[strStack,strTemp];
elseif isstrprop(strLast,'digit')
strStack=[strStack,strTemp];
else
if ~isempty(strStack)
strStack=[strStack,' ',strTemp];
else
strStack=[strStack,strTemp];
end
end
else
tPos=find(symStack=='(',1,'last');
switch strTemp
case '+'
symStack=[symStack,'+'];
if isempty(tPos)
strStack=[strStack,symStack(end-1:-1:1)];
symStack(end-1:-1:1)=[];
else
strStack=[strStack,symStack(end-1:-1:tPos+1)];
symStack(end-1:-1:tPos+1)=[];
end
case '-'
symStack=[symStack,'-'];
if isempty(tPos)
strStack=[strStack,symStack(end-1:-1:1)];
symStack(end-1:-1:1)=[];
else
strStack=[strStack,symStack(end-1:-1:tPos+1)];
symStack(end-1:-1:tPos+1)=[];
end
case '*'
symStack=[symStack,'*'];
case '/'
symStack=[symStack,'/'];
if length(symStack)>1&&symStack(end-1)=='*'
strStack=[strStack,'*'];
symStack(end-1)=[];
end
case '('
symStack=[symStack,'('];
case ')'
strStack=[strStack,symStack(end:-1:tPos+1)];
symStack(end:-1:tPos)=[];
end
end
strLast=strTemp;
end
strStack=[strStack,symStack(end:-1:1)];
end
使用实例:
strFunc='24*(3+4/5-5)/5+26';
in2postFix(strFunc)
运行结果:
24 3 4 5/+5-*5/26+