Advertisement
ShrekOP

3AC-C++

Dec 16th, 2022
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.00 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. map <char,int> precedence;
  5.  
  6. bool sortbysec(const pair<char,int> &a,
  7. const pair<char,int> &b)
  8. {
  9. return (precedence[a.first] < precedence[b.first]);
  10. }
  11.  
  12. int main()
  13. {
  14. precedence['/'] = 1;
  15. precedence['*'] = 2;
  16. precedence['+'] = 3;
  17. precedence['-'] = 4;
  18. int opc = 0;
  19. char token;
  20. vector<bool> processed;
  21. vector<pair<char,int>> ops;
  22. string inp = "",expr = "", temp;
  23.  
  24. cout << "Enter an expression: ";
  25. getline(cin,inp);
  26.  
  27. for(int i = 0;i<inp.length();i++)
  28. {
  29. if(inp[i] != ' ')
  30. {
  31. expr += inp[i];
  32. }
  33. }
  34.  
  35. for(int i = 0;i<expr.length();i++)
  36. {
  37. processed.push_back(false);
  38. }
  39.  
  40. for(int i = 0;i<expr.length();i++)
  41. {
  42. char tk = expr[i];
  43. if(precedence[tk] != 0)
  44. {
  45. ops.push_back(make_pair(tk,i));
  46. opc++;
  47. }
  48. }
  49. cout << "----------------------------Operators-----------------------" << endl << endl;
  50. cout << "Operators\tLocation" << endl << endl;
  51.  
  52. for(int i = 0;i<opc;i++)
  53. {
  54. cout << ops[i].first << "\t\t" << ops[i].second << endl;
  55. }
  56. cout << endl << endl <<endl;
  57.  
  58. sort(ops.begin(), ops.end(), sortbysec);
  59.  
  60. int tmp;
  61. for(int i = 0;i<opc;i++)
  62. {
  63. tmp = ops[i].second;
  64. string op1 = "", op2 = "";
  65. if(processed[tmp-1] == true)
  66. {
  67. if(precedence[ops[i-1].first] == precedence[ops[i].first])
  68. {
  69. op1 = "t" + i;
  70. }
  71. else
  72. {
  73. for(int k = 0;k<opc;k++)
  74. {
  75. if(tmp-2 == ops[k].second)
  76. {
  77. char c = k+1 + '0';
  78. op1 = "t";
  79. op1 += c;
  80. }
  81. }
  82. }
  83. }
  84. else
  85. {
  86. op1 = expr[tmp-1];
  87. }
  88. if(processed[tmp+1] == true)
  89. {
  90. for(int k = 0;k<opc;k++)
  91. {
  92. if(tmp+2 == ops[k].second)
  93. {
  94. char c = k+1 + '0';
  95. op2 = "t";
  96. op2 += c;
  97. }
  98. }
  99. }
  100. else
  101. {
  102. op2 = expr[tmp+1];
  103. }
  104. cout << "t" << i+1 << " = " << op1 << " " << ops[i].first << " " << op2 << endl;
  105. processed[tmp] = true;
  106. processed[tmp-1] = true;
  107. processed[tmp+1] = true;
  108. }
  109. cout << endl;
  110.  
  111. //cout << expr;
  112. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement