Заменить подстроку между первой и соответствующей ей скобками (КуМир)

Тема: 
Строки

Написать программу, которая находит первую квадратную открывающую скобку и соответствующую ей закрывающую и вместо подстроки между этими скобками вставляет другую подстроку. Следует иметь в виду, что между первой открывающией и соответствующей ей закрывающей могут находится еще скобки (вложенные).

Алгоритм поиска первой открывающей скобки:

  1. Перебирать символы строки.
  2. Если очередной символ квадратная скобка, то
  3. присвоить переменной (p1) индекс этого символа и
  4. прервать дальнейшее выполнение цикла.
  5. Если скобка в строке не была найдена, то закончить выполнение программы.

Алгоритм поиска соответствующей закрывающей скобки:

  1. Перебирать символы строки от следующего за открывающей скобкой.
  2. Если очередной символ еще одна открывающая скобка, то
  3. увеличить счетчик открывающих скобок, иначе
  4. если очередной символ закрывающая скобка и счетчик открывающих скобок равен нулю, то
  5. (значит мы имеем дело с закрывающей скобкой, соответствующей первой) присвоить индекс символа переменной (p2) и прервать выполнение цикла, иначе
  6. (т.е. если закрывающая скобка, но счетчик открывающих не равен нулю) уменьшить счетчик открывающих скобок на единицу.
  7. Если соответствующая закрывающая скобка не была найдена, то закончить выполнение программы.

алг скобки 
нач
  лит s, s1, s2
  цел p1, p2, i, count
  ввод s
 
  | находим позицию первой открывающей скобки
  p1 := 0
  нц для i от 1 до длин(s)
    если s[i] = '[' то
      p1 := i
      выход
    все
  кц
  если p1 = 0 то выход все | если скобка не найдена, выходим из программы
 
  | находим позицию соответствующей закрывающей скобки
  p2 := 0
  count := 0
  нц для i от p1+1 до длин(s)
    если s[i] = '[' то
      count := count + 1
     иначе
      если s[i] = ']' то 
        если count = 0 то
          p2 := i
          выход
         иначе
          count := count - 1
        все
      все
    все
  кц
  если p2 = 0 то выход все | если скобка не найдена, выходим из программы
 
  s1 := s[p1:p2] 
  вывод "Будет заменена подстрока: ", s1, нс
  вывод "Введите подсктроку для вставки: "
  ввод s2
  s := s[1:p1] + s2 + s[p2:длин(s)]
  вывод s, нс
кон

Примеры выполнения программы:

Привет [имя]!
Будет заменена подстрока: [имя]
Введите подстроку для вставки: Мир
Привет [Мир]!
one two [tree [four] five]
Будет заменена подстрока: [tree [four] five]
Введите подстроку для вставки: ... ten
one two [... ten]