1個の末端として「」逆ポーランド記法への最初のシンボル・スタックを使用して、そして加えます。
スタック2は、ポーランドの式の値の逆数を用いて計算されます。
クラス解決{ パブリック: int型の計算(文字列s_mid){ unordered_map < チャー、INT > M = {{ ' + '、1 }、{ ' - '、1 }、{ ' * '、2 }、{ ' / '、2 }}; スタック < チャー > S; 文字列s_reは、 // 逆ポーランド記法を回す ため(INT I =0 ; iがs_mid.sizeを<(); iが++ ){ チャー C = s_mid [I]。 もし(C == ' ')続けます。 もし(<= C ' 9 ' && C> = ' 0 ' ){ ながら(iはs_mid.size()&& s_midを<I <= ' 9 ' && s_mid [I]> = ' 0 ' ){ C = s_mid [私]; s_re.push_back(C); I ++ ; s_re.push_back(' ' ); I - ; 続け; } であれば(s.empty()){ s.push(C); } 他{ ながら(!s.empty()&& M [s.top()]> = M [C]){ s_re.push_back(s.top())。 s.pop(); } s.push(C); } } ながら(!s.empty()){ s_re.push_back(s.top())。 s.pop(); } // COUT << s_re << ENDL。 // 出力はポーランド記法逆 // 逆ポーランド表情評価値と、 スタック< INT > RES; のため(int型 I = 0 ;私は(s_re.sizeを<); I ++は){ チャー C = s_re [I]; IF(C == ' ')続行; IF(C <= ' 9 ' && C => ' 0 ' ){ int型 NUM = 0 ; 一方、(I)は、(s_re.sizeを<&& s_re [i]は!= "、 C = s_re [I]。 NUM = NUM * 10 +(C- ' 0 ' )。 I ++ ; } res.push(NUM)。続け; } int型、B、和= 0 。 B = res.top(); res.pop()。= res.top();()res.pop。 もし(C == ' + ' ) の合計 = A + B。 それ以外の場合 '){ (C == ' - ' ) の合計 = A- B。 それ以外の 場合(C == ' * ' ) 合計は、 *の= Bを、 それ以外の 場合(C == ' / ' ) の合計 = A / B; res.push(合計)。 } 戻りres.top()。 } }。