В настоящее время я работаю над своей первой домашней работой по подготовке данных
Тема "сопоставление скобок"
Ответ на мой взгляд прост,
просто вставьте открывающую скобку в стек, и когда вы встретите закрывающую скобку, вытащите ее.
По окончании моего кода я отправлю его в нашу систему онлайн-оценки в школе
Только получите 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;
}
Я бы посоветовал вам проверить обратную полировку, она будет обрабатывать все ваши проблемы.