所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右进行(不用考虑运算符的优先级)。如:中缀表达式 3*(5–2)+7 对应的后缀表达式为:352-*7+ 。请将给出的中缀表达式转化为后缀表达式并输出。输入格式:输入仅一行为中缀表达式,式中所有数字均为个位数,表达式长度小于1000。输出格式:输出一行,为后缀表达式,式中无空格。输入样例:2+4*8+(8*8+1)/3输出样例:248*+88*1+3/+求助,万分感谢。
正好有以前的参考#includeiostream#includecstdlib#includestackusingnamespacestd;intPrecede(chara,charb){inti;if((a==+||a==-)&&(b==*||b==/))i=1;if((a==+||a==-)&&(b==+||b==-))i=0;if((a==*||a==/)&&(b==*||b==/))i=0;if((a==*||a==/)&&(b==+||b==-))i=0;if(a==(||a==))i=1;returni;}intNifix_To_Suffix(char*p){chara,c,e;inti;stackcharsc;c=*p++;while(c!=\0){if(c=48&&c=57)coutc;if(c==()sc.push(c);if(c==)){if(!sc.empty())e=sc.top();while(e!=(){a=sc.top();sc.pop();couta;if(!sc.empty())e=sc.top();if(e==(){e=sc.top();sc.pop();}}}if(c==+||c==-||c==*||c==/){if(sc.empty())sc.push(c);else{e=sc.top();i=Precede(e,c);if(i==1)sc.push(c);if(i==0){while(!i){a=sc.top();sc.pop();couta;if(!sc.empty()){e=sc.top();i=Precede(e,c);}elsebreak;}sc.push(c);}}}c=*p++;}if(!sc.empty()){while(!sc.empty()){a=sc.top();sc.pop();couta;}}coutendl;return0;}intmain(){chars[1001];cins;Nifix_To_Suffix(s);return0;}