Другие языки программирования и технологии

Задача С++. Правильная скобочная последовательность.

#include <stack>
#include <iostream>

int main() {
    std::stack<char> s;
    char c;
    for (char c; std::cin >> c;) {
        switch (c) {
        case '(': case '{': case '[':
            s.push(c);
            break;
        case ')': case '}': case ']':
            if (s.empty() || (c == ')' && s.top() != '(') ||
                (c == '}' && s.top() != '{') || (c == ']' && s.top() != '[')) {
                std::cout << "no";
                return 0;
            }
            s.pop();
            break;
        }
    }
    std::cout << (s.empty() ? "yes" : "no");
}
Дмитрий Черняков
Дмитрий Черняков
59 916
Лучший ответ
Выкидывать октрывающую скобку из стека нужно только в том случае, если тип закрывающей скобки соотвествует типу последней открывающей скобки в стеке. А не в любом случае.

Стоп, не доглядел код)
Бросается в глаза не нужный аргумент у функции pop(). Вместо функции [pop, можно использовать команду sp--;

Попробуй? Проходит? )
http://pastebin.com/6MWhg4ZV
Вы неэкономный программист )