На вопрос о совпадении скобок в C ++

0

В настоящее время я работаю над своей первой домашней работой по подготовке данных

Тема "сопоставление скобок"

Ответ на мой взгляд прост,

просто вставьте открывающую скобку в стек, и когда вы встретите закрывающую скобку, вытащите ее.

По окончании моего кода я отправлю его в нашу систему онлайн-оценки в школе

Только получите 9 исправлений из 10 вопросов.

Здесь мой c++ код

Есть ли какая-то ситуация, которую я пропустил в этом коде? Спасибо вам всем!

/Вопрос здесь/Вопрос заключается в том, что вводится целое число N <1000, что означает наличие тестовых ящиков

и после N строк длина <1000 должна быть проверена, если она действительная строка

Если да, выведите пример N (от 1 ~ N): Да

Нет, выходной случай N (от 1 ~ N): Нет

строка может содержать символ новой строки

#Test cases

вход

2

[] [] <>() [{}]

<{>}

Вывод

Случай 1: Да

Случай 2: Нет

#include <iostream>
#include <string>
using namespace std;

class PARENTHE
{
public:

 PARENTHE(int slength);
 ~PARENTHE();

 int StackSize() const;

 bool StackEmpty() const;

 char top() const;

 void Push(const char);
 void Pop();

private:
 char *str;
 int slength;
 int stop;

};

PARENTHE::PARENTHE(int slength)
{

    str = new char [slength];
    stop = -1;
}

PARENTHE::~PARENTHE()
{ delete [] str; }

inline int PARENTHE::StackSize() const
{ return stop+1; }

inline bool PARENTHE::StackEmpty() const
{
    return (stop == -1);
}

inline char PARENTHE::top() const
{ return str[stop]; }

void PARENTHE::Push(const char c)
{
     str[++stop] = c;
}

void PARENTHE::Pop()
{
     stop--;
}



int main()
{
    int t;

    while( cin>>t )
    {

       int i = 0;

       while( i < t )
         {

            string temp;
            cin>>temp;

            if(temp == "\n")
            {
                cout<<"Case "<<++i<<": "<<"Yes"<<endl;
                break;
            }

            PARENTHE S( 1001 );

            bool check = false;

            for( int it = 0; it < temp.size() ; ++it )
            {

                if( temp[it] == '{' || temp[it] == '[' || temp[it] == '(' || temp[it] == '<' )
                    S.Push(temp[it]);

                else if ( temp[it] == '}' || temp[it] == ']' || temp[it] == '>' || temp[it] == ')' )
                {
                    if(!S.StackEmpty())
                    {
                    if(( S.top() == '{' && temp[it] == '}' ) || ( S.top() == '(' && temp[it] == ')' ) || ( S.top() == '[' && temp[it] == ']' ) || ( S.top() == '<' && temp[it] == '>' ) )
                            {
                                S.Pop();
                            }

                    else { break; }

                    }

                    else { break; }


                }

                if ( it == (temp.size()-1) && (!S.StackSize()))
                {
                   check = true;
                }

            }
            if(check)
                cout<<"Case "<<++i<<": "<<"Yes"<<endl;

            else
                cout<<"Case "<<++i<<": "<<"No"<<endl;

       }
     }

    return 0;
}
  • 0
    Ваша тестовая строка содержит пробелы? stackoverflow.com/questions/5838711/c-cin-input-with-spaces
  • 0
    Я не получаю правильное о / п для вашей программы. Можете ли вы отредактировать свой вопрос, чтобы включить пример теста
Показать ещё 13 комментариев
Теги:
stack

1 ответ

0

Я бы посоветовал вам проверить обратную полировку, она будет обрабатывать все ваши проблемы.

  • 1
    Ткс для обмена! :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню