C++ Brackets sequence..

kitty.
Пользователь
Статус
Оффлайн
Регистрация
17 Окт 2021
Сообщения
282
Реакции[?]
111
Поинты[?]
17K
может кому-то тоже пригодится, домашку там по инфе зададут или ещё чё..

C++:
bool xo( std::string symbols ) {
    std::stack<char> stack{ };

    const std::vector<char> left_brackets = { '(', '{', '[' };

    for ( auto i{ 0 }; i < symbols.size( ); i++ ) {
        const auto bracket{ std::ranges::find( left_brackets.begin( ), left_brackets.end( ), symbols.at( i ) ) };

        if ( bracket == left_brackets.end( ) ) {
            if ( !stack.empty( ) && ( ( stack.top( ) == '(' && symbols.at( i ) != ')' ) || ( stack.top( ) == '{' && symbols.at( i ) != '}' ) || ( stack.top( ) == '[' && symbols.at( i ) != ']' ) ) )
                return false;
            else if ( !stack.empty( ) )
                stack.pop( );
        }
        else
            stack.push( *bracket );
    }

    return stack.empty( );
}

C++:
bool xo( std::string symbols ) {
    auto j{ 0 };

    for ( auto i{ 0 }; i < symbols.size( ); i++ ) {
        switch ( symbols.at( i ) ) {
            case '(':
            case '{':
            case '[':
                j++; break;
            case ')':
            case '}':
            case ']':
                j--; break;
        }
    }

    return !j;
}
 
Последнее редактирование модератором:
Пользователь
Статус
Оффлайн
Регистрация
7 Ноя 2019
Сообщения
146
Реакции[?]
44
Поинты[?]
0
может кому-то тоже пригодится, домашку там по инфе зададут или ещё чё..

C++:
bool xoxli_xruxru( std::string symbols ) {
    std::stack<char> stack{ };

    const std::vector<char> left_brackets = { '(', '{', '[' };

    for ( auto i{ 0 }; i < symbols.size( ); i++ ) {
        const auto bracket{ std::ranges::find( left_brackets.begin( ), left_brackets.end( ), symbols.at( i ) ) };

        if ( bracket == left_brackets.end( ) ) {
            if ( !stack.empty( ) && ( ( stack.top( ) == '(' && symbols.at( i ) != ')' ) || ( stack.top( ) == '{' && symbols.at( i ) != '}' ) || ( stack.top( ) == '[' && symbols.at( i ) != ']' ) ) )
                return false;
            else if ( !stack.empty( ) )
                stack.pop( );
        }
        else
            stack.push( *bracket );
    }

    return stack.empty( );
}

C++:
bool xoxli_xruxru( std::string symbols ) {
    auto j{ 0 };

    for ( auto i{ 0 }; i < symbols.size( ); i++ ) {
        switch ( symbols.at( i ) ) {
            case '(':
            case '{':
            case '[':
                j++; break;
            case ')':
            case '}':
            case ']':
                j--; break;
        }
    }

    return !j;
}
не знаю в чем смысл данной темы, но вот мое решение. скорость работы такая же (или чуть быстрее,но на уровне погрешности)
(добавил коментарии на случай если это реально кому то надо для дз и тд)
C++:
bool check_brackets(std::string in) {
    // все проверяемые нами символы.
    std::vector <char> left_brackets    = { '[', '(', '<', '{' };
    std::vector <char> right_brackets   = { ']', ')', '>', '}' };

    // значение символов в том же порядке.
    std::vector <int>  indexes            = {  0,   0,   0,   0  };            

    // запускаем цикл от 0 до конца строки.
    for (int i = 0; i < in.length(); i++) {
        // начниаем проверку на определенные буквы.
        for (int a = 0; a < left_brackets.size(); a++) {
            // если открываем скобку, то добавляем значение.
            if (in.at(i) == left_brackets[a]) {
                indexes[a]++;
            }

            // если закрываем скобку, то убавляем значение.
            else if (in.at(i) == right_brackets[a]) {
                indexes[a]--;
            }
        }
    }

    // цикл для провекри наших значений.
    for (int i = 0; i < indexes.size(); i++)
        // если имеется число не равное нулю, значит что где то была поставлена неверная скобка.
        if (indexes[i] != 0) return false;

    // выводим true если программа не была прервана.
    return true;
}
 
Последнее редактирование:
Похожие темы
Сверху Снизу