1準備乙個棧來儲存 運算子
2從右至左開始獲取字元
2.1 如果當前的字元為數字,則直接輸出
2.2 如果當前的字元為運算子,但不是「)」 ,從運算子棧中取得棧頂的運算子,判斷當前的運算子的優先順序是否大於等於棧頂運算子的優先順序
a. 如果優先順序大於等於棧頂運算子的優先順序,則將此運算子入棧
b. 否則,對站內的運算子進行出棧,並輸出,直到當前的運算子優先順序大於等於棧頂運算子的優先順序
2.3 如果當前字元為「)」,直接入棧
2.4 如果當前字元為「(」,出棧並輸出,直到棧頂元素為「)」時,將「)」出棧。
3 一直迴圈2的操作
4直到掃瞄結束,將棧內所有的運算子出棧並輸出。
void mainfunction(string &str)
break;
case 1: // 當前字元是 運算子
if(operatorstack.empty())
else
else
else
}} while ( false == bret );
operatorstack.push(cgetch);}}
break;
case 2: // 當前字元是 運算元
// 如果是數字,直接輸出數字
outputnewexpression(null,igetfigure);
break;
case 3: //if current charactor is "(" or ")"
if ( cgetch == ')' )
else
}break;
default:
break;
} }}
中綴表示式 轉換為 字首 字尾表示式
考慮表示式a b c。a b c 是等價的字尾表示式。我們已經注意到,運算元 a,b 和 c 保持在它們的相對位置。只有操作符改變位置。再看中綴表示式中的運算子。從左到右出現的第乙個運算子為 然而,在字尾表示式中,在結束位置,因為下乙個運算子 的優先順序高於加法。原始表示式中的運算子的順序在生成的字...
將中綴表示式轉換為字首表示式
將中綴表示式轉換為字首表示式 遵循以下步驟 1 初始化兩個棧 運算子棧 s1和儲存中間結果的棧s2 2 從右至左掃瞄中綴表示式 3 遇到運算元時,將其壓入s2 4 遇到運算子時,比較其與 s1棧頂運算子的優先順序 4 1 如果 s1為空,或棧頂運算子為右括號 則直接將此運算子入棧 4 2 否則,若優...
表示式轉換 中綴表示式轉換為字尾表示式
算術表示式有字首表示法 中綴表示法和字尾表示法等形式。日常使用的算術表示式是採用中綴表示法,即二元運算子位於兩個運算數中間。請設計程式將中綴表示式轉換為字尾表示式。輸入格式 輸入在一行中給出不含空格的中綴表示式,可包含 以及左右括號 表示式不超過20個字元。輸出格式 在一行中輸出轉換後的字尾表示式,...