fork(4) download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. string s , temp;
  4. stack < char > stk;
  5. char ch;
  6. int n , m , sz;
  7. int operator_value( char op );
  8. string Infix_To_Postfix();
  9. int main()
  10. {
  11. cin>>s;
  12. reverse( s.begin(), s.end() );
  13. s = Infix_To_Postfix();
  14. cout<<s<<endl;
  15. return 0;
  16. }
  17. string Infix_To_Postfix()
  18. {
  19. sz = s.size();
  20. for ( int i = 0; i != sz; i++ )
  21. {
  22. if ( s [ i ] >= 'a' && s [ i ] <= 'z' )temp += s [ i ];
  23. else if ( s [ i ] == ')' )stk.push( s [ i ] );
  24. else if ( s [ i ] == '(' )
  25. {
  26. while ( !stk.empty() && stk.top() != ')' )
  27. {
  28. ch = stk.top();
  29. stk.pop();
  30. temp += ch;
  31. }
  32. stk.pop();
  33. }
  34. else
  35. {
  36. while ( !stk.empty() && operator_value( s [ i ] ) <= operator_value( stk.top() ) )
  37. {
  38. ch = stk.top();
  39. stk.pop();
  40. if ( ch != ')' && ch != '(' )temp += ch;
  41. }
  42. stk.push( s [ i ] );
  43. }
  44. }
  45. while ( !stk.empty() )
  46. {
  47. if ( stk.top() != '(' && stk.top() != ')' )temp += stk.top();
  48. stk.pop();
  49. }
  50. reverse ( temp.begin() , temp.end() );
  51. return temp;
  52. }
  53. int operator_value( char op )
  54. {
  55. if ( op == '^' )return 3;
  56. if ( op == '*' || op == '/' )return 2;
  57. if ( op == '+' || op == '-' )return 1;
  58. return -1;
  59. }
  60.  
Success #stdin #stdout 0s 4508KB
stdin
(a+b)*(b-c)
stdout
*+ab-bc