Написать программу поиска самой внутренней вложенной пары скобок
Идея. Использовать счетчик, который увеличивает свое значение на 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>max) { 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;
}