Postfixの発現レビュー:https://blog.csdn.net/ssjhust123/article/details/8001651
タイトル内容:
統合「中置ターン接尾辞」と「接尾辞の評価」(非単純配列コール)を持つ2つの演算機能により、
中置式の直接の評価、新しいアルゴリズムまたは右中置式に左からスキャンし、
しかし、2つのスタック、一時的なオペレータ、一時記憶オペランドの使用が評価されます。
(サポート+ - 操作の* / ^ 5種類)
入力フォーマット:
文字列の合計1行、すなわち、インフィックス式、
前記各インター符号または記号は、スペースで区切られました。
出力フォーマット:
1行の整数、すなわち、評価した結果です。
サンプル入力:
(2 + 3)* 6 + 4月2日
出力例:
32
注意:
1.デジタル文字を接続します
2.pow介してDEVに(INT、INT)が、正しいフォーマットPOW(int型、ダブル)
1の#include <iostreamの> 2の#include <積層> 3の#include <キュー> 4の#include <cmath> 5 使って 名前空間STD。 6 ボイド POP1(スタック< CHAR >・X、キュー< チャー >&Y){ 7 一方!(x.empty()&&(x.top()== ' + ' || x.top()== ' - ' || x.top()== ' * ' || x.top()== ' / ' || x.top()== ' ^ " y.push(x.top())。 9 x.pop()。 10 } 11 } 12 空隙 POP2(スタック< CHAR >・X、キュー< チャー >&Y){ 13 ながら(!x.empty()&&(x.top()== ' * ' || x.top() == ' / ' || x.top()== ' ^ ' )){ 14 y.push(x.top())。 15 x.pop()。 16 } 17 } 18 ボイドのPOP3(スタック< CHAR >・X、キュー<>&Y){ 19 ながら(x.top()!= ' (' ){ 20 y.push(x.top()); 21 x.pop(); 22 } 23 x.pop(); 24 } 25 ボイド POP4(スタック< CHAR >・X、キュー< チャー >&Y){ 26 ながら(!x.empty()&& x.top()== ' ^ ' ){ 27 y.push(x.top() ); 28 x.pop(); 29 } 30 } 31 INTメイン(){ 32 チャーインフィックス[ 100 ]。 33 CHAR ; 34 int型B、C。 35 INTの記号= 0 。 36 スタック< チャー > my_symbol。 37 キュー< チャー > my_suffix。 38 スタック< 整数 > my_cal。 39 cin.getline(中置、100 )。 40 のために(int型 I = 0 ; iが< 100 ; ++ i)が{ 41 = インフィックス[I]。 42 であれば(== ' ' ){ 43 符号= 0 。 44 続け; 45 } 46 であれば(A == ' \ 0 ' ) 47 ブレーク。 48 であれば(' 0 ' <= A && <= ' 9 ' ){ 49 my_suffix.push(A)。 50 場合(!=署名0 ) 51 (my_suffix.pushを' @ ' ); 52 記号++ ; 53 続け; 54 } 55 スイッチ(A){ 56 ケース ' (':my_symbol.push(A); 破る; 57 ケース ' + ' : 58 ケース ' - ':POP1(my_symbol、my_suffix); my_symbol.push(a)は、休憩を; 59 の場合 ' * ' : 60 ケース ' / ':POP2(my_symbol、my_suffix)。my_symbol.push(A)。破ります; 61 ケース ' )' ] POP3(my_symbol、my_suffix)。破ります; 62 ケース ' ^ ':POP4(my_symbol、my_suffix)。my_symbol.push(A)。破ります; 63 } 64 サイン= 0 。 65 } 66 ながら(!my_symbol.empty()){ 67 my_suffix.push(my_symbol.top())。 68 my_symbol.pop()。 69 } 70 中(!my_suffix.empty()){ 71 、A = my_suffix.front()。 72 my_suffix.pop()。 73 であれば(' 0 ' <= A && <= ' 9 ' ){ 74 my_cal.push( - ' 0 ' )。 75 続け; 76 } 77 B = my_cal.top()。 78 my_cal.pop()。 79 C = my_cal.top()。 80 my_cal.pop()。 81 スイッチ(A){ 82 ケース ' + ' : 83 my_cal.push(C + B)。 84 ブレーク; 85 ケース ' - ' : 86 my_cal.push(C - B)。 87 ブレーク; 88 ケース ' * ' : 89 my_cal.push(C *とのB)。 90 ブレーク; 91 ケース ' / ' : 92 my_cal.push(C / B)。 93 ブレーク; 94 ケース ' @ ' : 95 my_cal.push(のC * 10 + B)。 96 ブレーク; 97 ケース ' ^ ' : 98 my_cal.push(POW(C、(二重)b)参照)。 99 ブレーク; 100 } 101 } 102 COUT << my_cal.top()<< ENDL。 103 リターン 0 ; 104 }