Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <cstdlib>
- #include <vector>
- using namespace std;
- bool num(char c)
- {
- return (c >= '0' && c <= '9');
- }
- bool is_op(char c)
- {
- return (c=='+' || c=='-' || c=='*' || c=='/');
- }
- int get_num(char *s)
- {
- return atoi(s);
- }
- void seti(char *s,int& i)
- {
- while (num(s[i]))
- i++;
- i--;
- }
- void process_op(vector<int>& st, char op)
- {
- int r = st.back(); st.pop_back();
- int l = st.back(); st.pop_back();
- switch (op) {
- case '+': st.push_back(l + r); break;
- case '-': st.push_back(l - r); break;
- case '*': st.push_back(l * r); break;
- case '/': st.push_back(l / r); break;
- case '%': st.push_back(l % r); break;
- }
- }
- int priority(char op)
- {
- if (op == '+' || op == '-')
- return 1;
- if (op == '*' || op == '/')
- return 2;
- return -1;
- }
- int main()
- {
- char s[255];
- cin >> s;
- vector<int> st;
- vector<char> op;
- for (int i = 0; i < strlen(s); i++)
- {
- if (s[i] == '(')
- op.push_back('(');
- else
- if (s[i] == ')')
- {
- while(op.back() != '(')
- {
- process_op(st,op.back());
- op.pop_back();
- }
- op.pop_back();
- }
- else
- if (is_op(s[i]))
- {
- char curop = s[i];
- while (!op.empty() && priority(op.back()) >= priority(curop))
- {
- process_op(st,op.back());
- op.pop_back();
- }
- op.push_back(curop);
- }
- else
- {
- int num = get_num(s+i);
- seti(s,i);
- st.push_back(num);
- }
- }
- while (!op.empty())
- {
- process_op(st,op.back());
- op.pop_back();
- }
- cout << st.back() << '\n';
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement