1、#include #include using namespace std;char ex100;/存储后缀表达式char str100;/存储算术表达式char stack100;/作为栈使用char ch;/当前判断的字符int i=0;/i 为算术表达式 str 的下标int t;/t 为后缀式 ex 的下标int top=0;/top 为栈顶void trans();/转换函数void compute();/计算后缀式的值void trans()/将中缀式转换为后缀式coutstri;/开始扫描t=1;i=1;ch=stri;i+;/i 指向当前扫描字符的下一位while(ch!=#)
2、/逐个扫描,直至遇到#号结束switch(ch) case(:/遇到(,进栈top+;stacktop=ch;break; case):/遇到),将靠近栈顶的第一个左括号上面的运算符全部依次弹出,送至后缀式队列后,再丢弃左括号。while(stacktop!=()ext=stacktop;top-;t+;top-;/丢弃(break;case+:case-:while(top!=0 top-;t+;top+;/因为 top 的初值为 0stacktop=ch;break;case*:case/:while(stacktop=*| stacktop=/)ext=stacktop;top-;t+;top+;stacktop=ch;break;/*注意!除操作数外,其它符号都要用到栈*/default:while(ch=0 /将数字字符转化为对应的数值,*10 是与大于 10 的数值时要进位ch=ext;t+;top+;stacktop=d;/栈顶存放当前计算结果/switch 结束ch=ext;/跳过空格符,扫描下一个运算符或操作数t+;cout“n 计算结果为:“stacktopendl;void main()trans();compute();