Advertisement
Guest User

Untitled

a guest
Dec 22nd, 2014
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.10 KB | None | 0 0
  1. #include <iostream>
  2. #include <stack>
  3. #include <vector>
  4. #include <utility>
  5.  
  6. using namespace std;
  7.  
  8. struct brace
  9. {
  10.   char c;
  11.   int pos;
  12. };
  13.  
  14. const vector<pair<char, char>> braces =
  15.   { make_pair('{', '}')
  16.   , make_pair('(', ')')
  17.   , make_pair('<', '>')
  18.   };
  19.  
  20. int main()
  21. {
  22.   stack<brace> stk;
  23.   char c;
  24.   int pos = 0;
  25.   while (cin.get(c)) {
  26.     ++pos;
  27.     for (const auto &i : braces) {
  28.       if (c == i.first) {
  29.         stk.emplace(brace{ i.second, pos });
  30.       }
  31.       else if (c == i.second) {
  32.         if (stk.empty()) {
  33.           cerr << "Got '" << c << "' bracket without an opening one at "
  34.                << pos << endl;
  35.         } else {
  36.           if (stk.top().c != c) {
  37.             cerr << "Expected '" << stk.top().c << "' bracket (opened at " << stk.top().pos
  38.                  << "), got '" << c << "' instead at " << pos << endl;
  39.           }
  40.           stk.pop();
  41.         }
  42.       }
  43.     }
  44.   }
  45.   while (!stk.empty()) {
  46.     cerr << "Expected '" << stk.top().c << "' bracket (opened at " << stk.top().pos
  47.          << "), got EOF" << endl;
  48.     stk.pop();
  49.   }
  50.   return 0;
  51. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement