Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- map <char,int> precedence;
- bool sortbysec(const pair<char,int> &a,
- const pair<char,int> &b)
- {
- return (precedence[a.first] < precedence[b.first]);
- }
- int main()
- {
- precedence['/'] = 1;
- precedence['*'] = 2;
- precedence['+'] = 3;
- precedence['-'] = 4;
- int opc = 0;
- char token;
- vector<bool> processed;
- vector<pair<char,int>> ops;
- string inp = "",expr = "", temp;
- cout << "Enter an expression: ";
- getline(cin,inp);
- for(int i = 0;i<inp.length();i++)
- {
- if(inp[i] != ' ')
- {
- expr += inp[i];
- }
- }
- for(int i = 0;i<expr.length();i++)
- {
- processed.push_back(false);
- }
- for(int i = 0;i<expr.length();i++)
- {
- char tk = expr[i];
- if(precedence[tk] != 0)
- {
- ops.push_back(make_pair(tk,i));
- opc++;
- }
- }
- cout << "----------------------------Operators-----------------------" << endl << endl;
- cout << "Operators\tLocation" << endl << endl;
- for(int i = 0;i<opc;i++)
- {
- cout << ops[i].first << "\t\t" << ops[i].second << endl;
- }
- cout << endl << endl <<endl;
- sort(ops.begin(), ops.end(), sortbysec);
- int tmp;
- for(int i = 0;i<opc;i++)
- {
- tmp = ops[i].second;
- string op1 = "", op2 = "";
- if(processed[tmp-1] == true)
- {
- if(precedence[ops[i-1].first] == precedence[ops[i].first])
- {
- op1 = "t" + i;
- }
- else
- {
- for(int k = 0;k<opc;k++)
- {
- if(tmp-2 == ops[k].second)
- {
- char c = k+1 + '0';
- op1 = "t";
- op1 += c;
- }
- }
- }
- }
- else
- {
- op1 = expr[tmp-1];
- }
- if(processed[tmp+1] == true)
- {
- for(int k = 0;k<opc;k++)
- {
- if(tmp+2 == ops[k].second)
- {
- char c = k+1 + '0';
- op2 = "t";
- op2 += c;
- }
- }
- }
- else
- {
- op2 = expr[tmp+1];
- }
- cout << "t" << i+1 << " = " << op1 << " " << ops[i].first << " " << op2 << endl;
- processed[tmp] = true;
- processed[tmp-1] = true;
- processed[tmp+1] = true;
- }
- cout << endl;
- //cout << expr;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement