akela43

parseValidBracketswithstack

May 2nd, 2020
470
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.64 KB | None | 0 0
  1. #include <iostream>
  2. #include <stack>
  3. #include <sstream>
  4. #include <cassert>
  5. using namespace std;
  6.  
  7. struct node
  8. {
  9.     char sym;
  10.     int pos;
  11. };
  12. bool isOpenBracket(const char & c) {
  13.     return  c == '{' || c == '[' || c == '(';
  14. }
  15. bool isClosedBracket(const char & c) {
  16.     return  c == '}' || c == ']' || c == ')';
  17. }
  18. bool isClosedBracketGood(const char  l, const char  r) {
  19.     return (l == '{' && r == '}') || (l == '[' && r == ']') || (l == '(' && r == ')');
  20. }
  21. int checkBracket(istream & s) {
  22.     char c;
  23.     int pos = 1;
  24.     std::stack <node> stk;
  25.     while (s >> c ) {
  26.         if (isOpenBracket(c)) stk.push({c, pos});
  27.         else if (isClosedBracket(c)) {
  28.             if (stk.empty()) return pos;
  29.             node x = stk.top();
  30.             if (isClosedBracketGood(x.sym, c))
  31.                 stk.pop();
  32.             else
  33.                 return pos;
  34.         }
  35.         pos++;
  36.     }
  37.     return stk.empty()? 0 : stk.top().pos;
  38. }
  39. int check(const char *s) {
  40.    istringstream iss(s);
  41.     return checkBracket(iss);
  42. }
  43. void test1() {
  44.     assert (check("([](){([])})") == 0);
  45.     assert (check("()[]}") == 5);
  46.     assert (check("{{[()]]") == 7);
  47.     assert (check("{{{[][][]") == 3);
  48.     assert (check("{*{{}") == 3);
  49.     assert (check("[[*") == 2);
  50.     assert (check("{*}") == 0);
  51.     assert (check("{{") == 2);
  52.     assert (check("{}") == 0);
  53.     assert (check("") == 0);
  54.     assert (check("}") == 1);
  55.     assert (check("*{}") == 0);
  56.     assert (check("{{{**[][][]") == 3);
  57. }
  58. int main()
  59. {
  60.     //test1();
  61.     int pos = checkBracket(cin);
  62.     if  (pos == 0) std::cout << "Success";
  63.     else std::cout << pos;
  64.     return 0;
  65. }
Advertisement
Add Comment
Please, Sign In to add comment