[#] Строки
vit01(mira, 1) — All
2015-12-04 04:13:29


В стороке заменить подстроку, находящуюся между первой открывающей квадратной
скобкой и соответствующей ей закрывающей.
Сложность данной задачи заключается в том, что между первой открывающей и
соответствующей ей закрывающей скобками, могут быть другие скобки. Например, в
строке 'a[bc[de]f]gh[jkl]' первая открывающая находится после символа 'a', а
соответствующая ей закрывающая - после символа 'f'. Т. е. по условию задачи в
данном примере замене подлежит подстрока '[bc[de]f]'.
Чтобы найти соответствующую закрывающую, в программе ниже вводится счетчик
последующих открывающих скобок, и пока он не будет равен нулю, все закрывающие
скобки соответствующими первой открывающей не считаются.
    s = input("Введите исходную строку: ")
    p1 = -1 # индекс первой открывающей скобки
    i = 0
    while i < len(s):
    	if s[i] == '[':
    		p1 = i # мы нашли скобку (ее индекс), 
    		break # дальше просматривать строку бессмысленно
    	i += 1
    if p1 == -1: exit() # открывающей скобки нет, выходим из программы
    p2 = -1 # индекс закрывающей скобки, соответствующей первой открывающей
    count = 0 # счетчик остальных открывающих скобок
    i += 1 # будем просматривать строку со следующего символа за тем, на котором остановились ранее
    while i < len(s): 
    	if s[i] == '[': 
    		count += 1
    	elif s[i] == ']': # встретилась закрывающая скобка 
    		if count == 0: # и счетчик равен нулю
    			p2 = i # значит это закрывающая скобка от первой открывающей
    			break # нет смысла просматривать дальше
    		else: # встретилась закрывающая скобка, но счетчик открыващих не равен нулю,
    			count -= 1 # значит была закрыта какая-то другая, но не первая скобка.
    	i += 1
    if p2 == -1: exit() # закрывающей скобки нет, выходим из программы
    s_in = input("Введите подстроку для вставки: ")
    s_out = s[p1+1:p2] # скобки не берем
    print("Вырезанная подстрока:", s_out)
    s = s[:p1] + s_in + s[p2+1:]
    print("Новая строка:", s)
Примеры выполнения программы:
    Введите исходную строку: [who[is]it] is big master-[kunfu?].
    Введите подстроку для вставки: Bob Green 
    Вырезанная подстрока: who[is]it
    Новая строка: Bob Green is big master-[kunfu?].
========
    Введите исходную строку: hello [world]
    Введите подстроку для вставки: space
    Вырезанная подстрока: world
    Новая строка: hello space