Задача: Есть массив char text[20][81], в нем записаны строки, необходимо найти и удалить содержимое правильно расставленных скобок, включая сами скобки. Сложность заключается в том, каким образом мне нужно определить пару для скобки среди других пар? При том, что скобки могут иметь пару на другой строке.
int index = 0, j = 0;//переменные для циклов
int open = 0, close = 0;//подсчет скобок
int arrayL[80] = {};//массив индексов левых скобок
int arrayR[80] = {};//массив индексов правых скобок
int l=0, r=0; // счетчик индексов для массива
while (index < strCount)
{
while (text[index][j] != NULL)
{
switch (text[index][j])
{
case '(':
{
open++;
arrayL[l] = j;
l++;
}
case ')':
{
close++;
arrayR[r] = j;
r++;
}
}
j++;
}
index++;
}
Моя попытка создать массив из левых и правых скобок, но в случае если скобки будут на разных строках придётся прикручивать костыль в виде подсчета элементов между ними(планировалось просто отнять от большего меньшее в стандартном случае)
Задача поиска парных скобок стара, как мир :-) И решение её известно давным-давно.
Если при достижении конца буфера выяснилось, что inside != 0, то это означает, что нарушен синтаксис расстановки скобок.
Разумеется, это очень черновой вариант. Но, я думаю, идея понятна.
int i, j, n, k=0;//переменные для цикла
int lenght;//длина строки
int indL[2] = {}, indR[2] = {};//левая и правая скобка соотв.
int flag = 0;//показатель была ли найдена открывающая скобка, 1 - найденна левая скобка
//[0] - координата по У; [1] - координата по Х
//Поиск последней закрывающей скобки
for(i = lineIndex; i < strCount; i++)
{
lenght = strlen(text[i]);
for (j = characterIndex; j <= lenght; j++)
{
if (text[i][j] == ')')
{
indR[0] = i;
indR[1] = j;
for (n = i; n > -1; n--)
{
while (k < 81 && k != NULL && k < j)
{
if ('(' == text[i][j])
{
indL[0] = i;
indL[1] = j;
flag = 1;
}
k++;
}
if (flag) n = -1;//ОСТАНОВОЧКА
}
if (flag)
{
brackets[0] = indL[0];
brackets[1] = indL[1];
brackets[2] = indR[1];
brackets[3] = indR[0];
j = 81;//АСТАНОВОЧКА
i = strCount;//ТОЖЕ АСТАНОВОЧКА
}
}
}
}
if (flag != 2)
{
brackets[0] = -1;
brackets[1] = -1;
brackets[2] = -1;
brackets[3] = -1;
}
Я решил эту задачу путем поиска закрывающей скобки, т.к. удобнее всего производить поиск парной(просто найти ближайшую). Там если мы нашли закр. скобку, то производится поиск в обратном порядке, пока не найдем открывающую, если не нашли, то ищем другую закрывающую. Мне показался этот способ самым наглядным. Принимаю критику что можно сделать по другому)
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники