• Source
    1. /// URI : 1077
    2. /// Author : Shohanur Rahaman
    3.  
    4. #include<iostream>
    5. #include<cstdio>
    6. #include<algorithm>
    7. #include<stack>
    8. #include<queue>
    9.  
    10. using namespace std;
    11.  
    12. int priority(char symbol)
    13. {
    14. switch(symbol)
    15. {
    16. // case '(':
    17. // return 0;
    18. case '+':
    19. case '-':
    20. return 1;
    21. case '*':
    22. case '/':
    23. // case '%':
    24. return 2;
    25. case '^':
    26. return 3;
    27. default :
    28. return 0;
    29. }
    30. }
    31. int main()
    32. {
    33.  
    34. string ara;
    35. stack <char> mystack;
    36. vector <char> output;
    37. int tc;
    38.  
    39. cin>>tc;
    40. while(tc--){
    41. cin>>ara;
    42.  
    43. for(int i=0;i<ara.length();i++){
    44.  
    45. if( ara[i] == '+' || ara[i] == '-' || ara[i] == '*' || ara[i] == '/' || ara[i] == '^'){
    46. while( !mystack.empty() && priority(mystack.top()) >= priority(ara[i]) ){
    47. output.push_back(mystack.top());
    48. mystack.pop();
    49. }
    50. mystack.push(ara[i]);
    51. }
    52. else if(ara[i] == '('){
    53. mystack.push(ara[i]);
    54. }
    55. else if( ara[i]==')' ){
    56. while( mystack.top() !='(' ){
    57. output.push_back(mystack.top());
    58. mystack.pop();
    59. }
    60. mystack.pop();
    61. }
    62. else {
    63. output.push_back(ara[i]);
    64. }
    65.  
    66. }
    67.  
    68. while( !mystack.empty() ){
    69. output.push_back(mystack.top());
    70. mystack.pop();
    71. }
    72. //printStack(mystack);
    73.  
    74. for(int i=0;i<output.size();i++){
    75. cout<<output[i];
    76. }
    77. cout<<endl;
    78. while(!output.empty()){
    79. output.pop_back();
    80. }
    81.  
    82. }
    83.  
    84. return 0;
    85. }
    86.