std::stack を使えば良いのかな?と思って書いたコードです。
#include <iostream> #include <string> #include <stack> #include <sstream> using namespace std; static bool isOperator(const string& st) { return st[0] == '+' || st[0] == '-' || st[0] == '*' || st[0] == '/'; } int main() { stack<string> st; string op1, op2, op, line, elem; int op1_i, op2_i, ans; // input line. getline(cin, line); stringstream ss(line); // sprit. while (getline(ss, line, ' ')) { st.push(line); elem = st.top(); if (isOperator(elem)) { op = st.top(); st.pop(); op2 = st.top(); st.pop(); op1 = st.top(); st.pop(); op1_i = stoi(op1); op2_i = stoi(op2); switch (op[0]) { case '+': ans = op1_i + op2_i; break; case '-': ans = op1_i - op2_i; break; case '*': ans = op1_i * op2_i; break; case '/': ans = op1_i / op2_i; break; } st.push(to_string(ans)); } } cout << st.top() << endl; return 0; }
オペランドと演算周りは素直に書けたのですが、プログラムの終了条件を確保するために、getline をどううまく使うか?という調査で時間がかかってしまいました。あと割り算は不要だったみたいです。。