Информатика и технология программирования

         

Написать программу поиска самой внутренней вложенной пары скобок


Идея. Использовать счетчик, который увеличивает свое значение на 1 на каждую из открывающихся скобок и уменьшает на 1 на каждую из закрывающихся. При этом фиксируется максимальное значение счетчика и позиция элемента, где это происходит.


//------------------------------------------------------prg1pr-01.cpp


// функция возвращает индекс скобки " { " для самой внутренней пары {}


int find(char c[])
{
int i; // Индекс в строке


int k; // Счетчик вложенности


int max; // Максимум вложенности


int b; // Индекс максимальной " {"


for (i=0, max=0, b=-1; c[i]!=0; i++)
{
if (c[i]== } ) k--;
if (c[i]== { )
{
k++;
if (k&#62max) { max=k; b=i; }
}
}
if (k!=0) return 0; // Защита " от дурака" , нет парных скобок


return b;
}

Другой вариант. Функция ищет первую внутреннюю пару скобок. Запоминается позиция открывающейся скобки, при обраружении закрывающейся скобки возвращается индекс последней открывающейся.


//------------------------------------------------------prg1pr-02.cpp


// функция возвращает индекс скобки " { " для первой внутренней пары {}


int find(char c[])
{
int i; // Индекс в строке


int b; // Индекс максимальной " {"


for (i=0, b=-1; c[i]!=0; i++)
{
if (c[i]== } ) return b;
if (c[i]== { ) b=i;
}
return b;
}



Содержание раздела