Comments 7
Если Вы используете C++, то почему бы не использовать и стандартные контейнеры из 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.
Из постфиксной в инфиксную нотацию