Pull to refresh

Comments 7

Если Вы используете C++, то почему бы не использовать и стандартные контейнеры из STL?
С++ изучаю не так давно, так что опыта работы с STL нет. Пользовался тем, что знаю.
А стоило ли тогда статью на хабр писать? Это же одна из первых лаб любого курса алгоритмов. К тому же в коде есть ошибки, и он неудачен по стилю.
Раньше на мехмате этому учили, даже на лиспе писал программку (своя имплементация Миксимы).
Не тянет статья на хабр. Хотя, может, алгоритм на С спасает. Да и как комментируют выше, алгоритм неидеален.
optype = {'^':3,'/':2,'*':2,'-':1,'+':1}
st = [] # stack
for i in "8 2 5*+ 1 3 2 * + 4 - /":
	if (i==' '): continue
	if (i in string.digits): st.append(i)
	else:
		ip = optype[i]
		i1 = st.pop()
		i2 = st.pop()
		i1p = 0 if i1 in string.digits else optype[i1] if i1 in optype.items() else 1
		i2p = 0 if i2 in string.digits else optype[i2] if i2 in optype.items() else 1
		if (i1p<ip and i1p!=0): i1 ='('+i1+')'
		if (i2p<ip and i2p!=0): i2 ='('+i2+')'
		st.append(i2+i+i1)
# сравним
print("(8+2*5)/(1+3*2-4)")
pr(st.pop())
Sign up to leave a comment.

Articles