Удаление скобок в предложении

Дано выражение: ((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();
}
→ Ссылка