Задать вопрос
17 сентября, 02:27

Дано N строк. Вывести для каждой строки Good, если она - правильное скобочное выражение и Bad, если нет.

+3
Ответы (1)
  1. 17 сентября, 03:45
    0
    Для проверки, закрыты ли все скобки, можно было бы просто их посчитать, но мы будем проверять правильность вложенности. Для этого нам пригодится std::stack (да, и решаем на С++).

    #include

    #include

    #include

    using namespace std;

    typedef unsigned short int USI;

    bool hasCorrectBracing (string);

    int main ()

    {

    setlocale (0, ""); / / кириллица

    USI N;

    cout << "N = ";

    cin >> N;

    string row;

    for (size_t i = 1; i < = N; i++)

    {

    cout << "Строка " << i << ": ";

    cin >> row;

    if (hasCorrectBracing (row))

    {

    cout << "Good/n";

    }

    else

    {

    cout < "Bad/n";

    }

    }

    return 0;

    }

    bool hasCorrectBracing (string r)

    {

    stack st;

    for (string::size_type c = 0;

    c < r. size ();

    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
Знаешь ответ?
Не уверен в ответе?
Найди верный ответ на вопрос ✅ «Дано N строк. Вывести для каждой строки Good, если она - правильное скобочное выражение и Bad, если нет. ...» по предмету 📙 Информатика, а если ответа нет или никто не дал верного ответа, то воспользуйся поиском и попробуй найти ответ среди похожих вопросов.
Искать другие ответы