Аватар
Информатика, опубликовано 2018-08-22 23:14:18 by Гость

Дано 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 st;

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

Вопрос
Не нашли ответа?
Если вы не нашли ответа на свой вопрос, или сомневаетесь в его правильности, то можете воспользоваться формой ниже и уточнить решение. Или воспользуйтесь формой поиска и найдите похожие ответы по предмету Информатика.