fork(6) download
  1. #include <iostream>
  2. #include <stack>
  3. using namespace std;
  4.  
  5. string deleteSpace (string x) //a+ b -> a+b
  6. {
  7. string rs = "";
  8. for (int i=0; i<x.length(); i++)
  9. if (x[i]!=' ')
  10. rs+=x[i];
  11. return rs;
  12. }
  13.  
  14. string delete_1 (string x) //delete string like (a)->a || ((a+b))->(a+b)
  15. {
  16. stack <char> s;
  17. stack <int> index;
  18. int dele[300] = {0};
  19. for (int i=0; i<x.length(); i++)
  20. {
  21. if (x[i]==')')
  22. {
  23. int flag = 0;
  24. while (s.top()!='(')
  25. {
  26. char top = s.top();
  27. if (top=='+' || top=='-')
  28. flag = 1;
  29. s.pop();
  30. index.pop();
  31. }
  32. if (flag == 0)
  33. {
  34. dele[index.top()] = 1;
  35. dele[i] = 1;
  36. }
  37. s.pop();
  38. index.pop();
  39. }
  40. else
  41. {
  42. s.push(x[i]);
  43. index.push(i);
  44. }
  45. }
  46. string rs = "";
  47. for (int i=0; i<x.length(); i++)
  48. {
  49. if (dele[i]==0)
  50. rs+=x[i];
  51. }
  52. return rs;
  53. }
  54.  
  55. string delete_2 (string x) //delete string like ((a+b)+c)->(a+b+c) || (a+(b-c))->(a+b-c)
  56. {
  57. stack <char> s;
  58. stack <int> index;
  59. int dele[300] = {0};
  60. for (int i=x.length()-1; i>=0; i--)
  61. {
  62. if (x[i]=='(')
  63. {
  64. int flag = 1;
  65. if (i==0 || x[i-1]!='-')
  66. flag = 0;
  67. while (s.top()!=')')
  68. {
  69. s.pop();
  70. index.pop();
  71. }
  72. if (flag == 0)
  73. {
  74. dele[index.top()] = 1;
  75. dele[i] = 1;
  76. }
  77. s.pop();
  78. index.pop();
  79. }
  80. else
  81. {
  82. s.push(x[i]);
  83. index.push(i);
  84. }
  85. }
  86. string rs="";
  87. for (int i=0; i<x.length(); i++)
  88. {
  89. if (dele[i]==0)
  90. rs+=x[i];
  91. }
  92. return rs;
  93. }
  94.  
  95. int main ()
  96. {
  97. string str = "";
  98. int n;
  99. cin>>n;
  100. cin.ignore();
  101. while (1)
  102. {
  103. if (n==0) break;
  104. n--;
  105. getline(cin, str);
  106. string str_no_space = deleteSpace(str);
  107. string str_1 = delete_1(str_no_space);
  108. string str_2 = delete_2(str_1);
  109. cout<<str_2<<endl;
  110. }
  111. return 0;
  112. }
Success #stdin #stdout 0s 4328KB
stdin
3
(A-B + C) - (A+(B - C)) - (C-(D- E) )
((A)-( (B)))
A-(B+C)
stdout
A-B+C-(A+B-C)-(C-(D-E))
A-B
A-(B+C)