書式#include <iostreamの> の#include <スタック> の#include <cmath> 使用して 名前空間はstd; char型のCH; ブール F(チャーT) { もし(T == ' + ' || T == ' - ' || T == ' * ' || T == ' / ' || T == ' (' || T == ' )' || T == ' = ' ) リターン 1 。 リターン 0 ; } ダブル CAL(二重 T1、二重 T2、チャーC) { スイッチ(C) { ケース ' + ':リターン T1 + T2。 ケース 「- 」:返さ T1〜T2を。 ケース ' * ':リターンのT1 *のT2; ケース ' / ':リターン T1 / T2。 } 戻り 0 。 } int型CMP(チャー T1、チャーT2) { int型、Q1 = 0、Q2 = 0 。 スイッチ(T1) { ケース ' + ':Q1 = 1。破ります; ケース ' - ':Q1 = 1。破ります; ケース ' * ':Q1 = 2 ; 破ります; ケース ' / ':Q1 = 2。破ります; ケース " (":Q1 = 0 ; 破ります; ケース ' )':Q1 = - 1。破ります; } スイッチ(T2) { ケース ' + ':Q2 = 1。破ります; ケース ' - ':Q2 = 1。破ります; ケース ' * ':Q2 = 2 ; 破ります; ケース ' / ':Q2 = 2。ブレーク; ケース ' (':Q2 = 0 ; 破る; ケース ' )':Q2 = - 1。破ります; } であれば(Q1 == - 1 && Q2 == 0 ) 戻り 0 ; もし(Q1> Q2) リターン 2 。 もし(Q1 <= Q2) リターン 1 。 戻る - 1 。 } 二重Z() { ダブルのANS = 0 ; INT [ 1000年 ]、I = 0、フラグ= 0 。 [ ++ i]は= CH- ' 0 ' 。 一方、(CIN >> CH &&!F(CH)) { 場合(CH == ' ' ) { フラグ = I。 続け; } [ ++ I] = CH- ' 0 ' 。 } であれば(フラグ== 0 ) フラグ = 私; 用(INTの J = 1 ; J <= I; J ++ ) { ANS + = [J] * POW(10、FLAG- J)。 } 戻りANS。 } int型のmain() { スタック < ダブル > OPND。// 存放数字 スタック< 文字 > OPTR。// 存放运算符 、二重T1、T2、T3; 一方、(CIN >> CH && CH =!' = ' ) { 場合(F(CH)) { OPTR.push(CH)。 CIN >> CH。 } 他 { OPND.push(Z()); } ながら(!CH = ' = ' ) { IF (F(CH)) { IF (OPTR.empty()) { OPTR.push(CH)。 CIN >> CH; 続行; } IF(CMP(CH、OPTR.top())== 1)// 格納された後、小さな優先順位、 { OPTR.push(CH); CIN >> CH; 続行; } そう IF(CMP(CH、OPTR.top())== 2)// 大きな優先算出した後 { チャー C1を= CH; CIN >> CH; T2 = Z() ; T1 = OPND.top(); OPND.pop(); T3 = CAL(T1、T2、C1); OPND.push(T3); } 他 { OPTR.pop()。 CIN >>CH; } } 他 { OPND.push(Z())。 } } ながら(!OPTR.empty()) { CH = OPTR.top()。 OPTR.pop(); T2 = OPND.top()。 OPND.pop(); T1 = OPND.top()。 OPND.pop(); T3 = CAL(T1、T2、CH)。 OPND.push(T3)。 } のprintf(" %.2lfする\ n "、OPND.top())。 OPND.pop(); getchar関数(); } 戻り 0 。 }
おそらく、そのデータの受信に注力