Matlab将中缀表达式变为后缀表达式(急!!)

求完整能运行程序!
考虑 + - * /四个运算符和()各类情况。
只要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+

img


可以参考下这篇文章,希望对你有帮助:
MATLAB实现中缀表达式转后缀表达式并计算_baidu_38306313的博客-CSDN博客 本文使用实现了MATLAB实现中缀表达式转后缀表达式并计算(数字包含0-9,符号包含+-*、())后缀表达式得到结果,下面是原理和代码。代码可以在CSDN中下载。 https://blog.csdn.net/baidu_38306313/article/details/107864577