Удаление скобок в предложении
Дано выражение: ((FvG)^(FvH)). Необходимо удалить скобки начиная со внутренних и заканчивая внешними. После первой итерации должно получиться (FvG^FvH) и потом уже FvG^FvH
Не могу понять как найти сами внутренние скобки, чтобы цикл продолжался.
Ответы (1 шт):
Автор решения: Alexander Petrov
→ Ссылка
var sb = new StringBuilder("((FvG)^(FvH))");
Console.WriteLine(sb);
var indexes = new List<(int, int)>();
while (true)
{
int start = -1;
int end = 0;
for (int i = 0; i < sb.Length; i++)
{
if (sb[i] == '(')
{
start = i;
}
if (sb[i] == ')' && start != -1)
{
end = i;
indexes.Add((start, end));
start = -1;
}
}
if (indexes.Count == 0)
break;
for (int i = indexes.Count - 1; i >= 0; i--)
{
(start, end) = indexes[i];
// Здесь можно вставить какую-то логику для обработки значений между скобками
// string value = s.ToString(start + 1, end - start - 1);
sb.Remove(end, 1);
sb.Remove(start, 1);
}
Console.WriteLine(sb);
indexes.Clear();
}