Дано N строк. Вывести для каждой строки Good, если она - правильное скобочное выражение и Bad, если нет.
Для проверки, закрыты ли все скобки, можно было бы просто их посчитать, но мы будем проверять правильность вложенности. Для этого нам пригодится std::stack (да, и решаем на С++).
#include
#include
#include
using namespace std;
typedef unsigned short int USI;
bool hasCorrectBracing(string);
int main()
{
setlocale(0, ""); // кириллица
USI N;
cout cin >> N;
string row;
for(size_t i = 1; i {
cout cin >> row;
if ( hasCorrectBracing(row) )
{
cout }
else
{
cout }
}
return 0;
}
bool hasCorrectBracing(string r)
{
stack
for(string::size_type c = 0;
c c++)
{
if (r[c] == ()
{
st.push(();
continue;
}
else
{
if (r[c] == [)
{
st.push([);
continue;
}
else
{
if (r[c] == {)
{
st.push({);
continue;
}
}
} // end 1st if
if
(
(
(st.top() == ()
&&
(r[c] == ))
)
||
(
(st.top() == [)
&&
(r[c] == ])
)
||
(
(st.top() == {)
&&
(r[c] == })
)
)
{
st.pop();
} //end 2nd if
} // end for
if ( st.empty() )
{
return true;
}
else
{
return false;
}
} // end fun
