逆波蘭計算 中綴轉字尾 字尾表示式計算

2021-08-25 05:16:16 字數 1096 閱讀 5386

我們利用棧將中綴表示式轉換為字尾表示式(逆波蘭表示式)來計算表示式

此程式支援整數運算(+、-、*、/、^、())

遍歷中綴表示式,遇到運算元就輸出,遇到符號就壓入棧中(棧中的運算子為掛起狀態),但是操作符的壓棧出棧有如下規則:

碰到運算元壓入棧中,碰到運算子提取棧頂兩個元素進行相應的操作,將運算元壓入棧中,直到整個表示式遍歷完成,棧中的元素就是最後的計算結果

程式清單:

#include #include #include #include #include using namespace std;

double cal(string str)//計算字尾表示式

} else//當前的是運算元,直接壓入棧中

}return s.top();//將棧中的唯一乙個元素輸出就表示是最後的運算結果

}string trans(string str)

else

}//開始計算字尾表示式

stringstream input(str1);

string temp, out;

stacks;

while (input >> temp)

//知道碰見左括號

s.pop();//左括號彈出並不輸出

}else

return " ";

} else if (temp[0] == '+' || temp[0] == '-')

else

}s.push(temp[0]);//該輸出的運算子輸出之後將當前的運算子(+或者-)壓入棧中}}

else if (temp[0] == '*' || temp[0] == '/')//如果是*或者/

s.push(temp[0]);//輸出以後將當前操作符壓棧

} else if (temp[0] == '^' || temp[0] == '(')//這兩個運算子的優先順序最高,直接入棧即可

else

}while (!s.empty())//遍歷完成之後將棧中剩餘的運算子輸出

return out;

}int main()

return 0;

}

中綴表示式轉字尾(逆波蘭)表示式

原則 從左到右遍歷中綴表示式 1 如果是數字則直接輸出 2 如果是左括號,直接入棧 3 如果是右括號,直接棧頂元素出棧並輸出,直到遇到左括號,左括號只出棧,不輸出 4 如果是符號,如果優先順序不高於棧頂符號則棧頂元素依次出棧並輸出 如果遇到 符號,如果棧非空並且棧頂元素不是左括號,則出棧並且輸出,否...

字首(波蘭) 中綴 字尾(逆波蘭)表示式

字首 中綴 字尾表示式是對表示式的不同記法,其區別在於運算子相對於運算元的位置不同,字首表示式的運算子位於運算元之前,中綴和字尾同理。字首表示式又稱波蘭式,字首表示式的運算子位於運算元之前。舉例說明 3 4 5 6對應的字首表示式就是 3456。字首表示式的計算機求值 從右往左掃瞄表示式,遇到數字時...

逆波蘭計算器 中綴表示式轉字尾表示式

1 2 3 4 5 2 這就叫中綴表示式,也就是說運算子在兩個運算元中間,這比較符合我們人類正常的計算題書寫規則與習慣.一目了然有木有 1,2,3依次進棧,此時棧內依次為1 2 3 遇到 2 3出棧計算得到5,5再進棧,此時棧內依次為1 5 4進棧,此時棧內依次為1 5 4 遇到 4 5 出棧計算得...