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