Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <stack>
- #include <sstream>
- #include <cassert>
- using namespace std;
- struct node
- {
- char sym;
- int pos;
- };
- bool isOpenBracket(const char & c) {
- return c == '{' || c == '[' || c == '(';
- }
- bool isClosedBracket(const char & c) {
- return c == '}' || c == ']' || c == ')';
- }
- bool isClosedBracketGood(const char l, const char r) {
- return (l == '{' && r == '}') || (l == '[' && r == ']') || (l == '(' && r == ')');
- }
- int checkBracket(istream & s) {
- char c;
- int pos = 1;
- std::stack <node> stk;
- while (s >> c ) {
- if (isOpenBracket(c)) stk.push({c, pos});
- else if (isClosedBracket(c)) {
- if (stk.empty()) return pos;
- node x = stk.top();
- if (isClosedBracketGood(x.sym, c))
- stk.pop();
- else
- return pos;
- }
- pos++;
- }
- return stk.empty()? 0 : stk.top().pos;
- }
- int check(const char *s) {
- istringstream iss(s);
- return checkBracket(iss);
- }
- void test1() {
- assert (check("([](){([])})") == 0);
- assert (check("()[]}") == 5);
- assert (check("{{[()]]") == 7);
- assert (check("{{{[][][]") == 3);
- assert (check("{*{{}") == 3);
- assert (check("[[*") == 2);
- assert (check("{*}") == 0);
- assert (check("{{") == 2);
- assert (check("{}") == 0);
- assert (check("") == 0);
- assert (check("}") == 1);
- assert (check("*{}") == 0);
- assert (check("{{{**[][][]") == 3);
- }
- int main()
- {
- //test1();
- int pos = checkBracket(cin);
- if (pos == 0) std::cout << "Success";
- else std::cout << pos;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment