括號匹配與表示式求值問題

2022-08-22 10:51:11 字數 766 閱讀 3677

運算子定義優先順序:#   (   +   -   *   /   

-1   0   1   1   2   2 

從原表示式求字尾式的規則為:

1.新建運算子棧,棧底元素為"#"(作為運算子棧的結束符號),從第乙個位置起掃瞄表示式

2.若當前字元是運算元,則直接傳送給字尾表示式,掃瞄位置加1;

3.若當前字元為運算子且優先順序大於棧頂運算子,則進棧,掃瞄位置加1。

4.若當前字元為運算子且優先順序不大於(小於等於)棧頂運算子,則退出棧頂運算子並將其傳送給字尾式,並將將當前運算子放入棧中,掃瞄位置不變。

5.若當前字元為"(",直接進棧,掃瞄位置加1。

6.若當前字元為")",則從棧頂起,依次將棧中"("之前的運算子出棧並傳送給字尾式,並將棧中"("出棧,掃瞄位置加1。

7.若當前字元是結束符,則將棧中的全部運算子依次傳送給字尾式(不包括運算子的結束符號)。

**如下:

char *rpexpression(char *e)

/* 返回表示式e的逆波蘭式 */

switch(e[i])

else

}case '*':

case '/':

else

}case '(':

case ')':

pop(s,c);

break;

}}

}while(top(s)!='#')

t[j]='\0';

return t;

}

表示式括號匹配

假設乙個表示式有英文本母 小寫 運算子 和左右小 圓 括號構成,以 作為表示式的結束符。請編寫乙個程式檢查表示式中的左右圓括號是否匹配,若匹配,則返回 yes 否則返回 no 表示式長度小於255,左圓括號少於20個。輸入格式 一行 表示式 輸出格式 一行 yes 或 no 輸入樣例 1 2 x y...

表示式括號匹配

假設乙個表示式有英文本母 小寫 運算子 和左右小 圓 括號構成,以 作為表示式的結束符。請編寫乙個程式檢查表示式中的左右圓括號是否匹配,若匹配,則返回 yes 否則返回 no 表示式長度小於255,左圓括號少於20個。輸入格式 一行 表示式 輸出格式 一行 yes 或 no include incl...

表示式括號匹配

假設乙個表示式有英文本母 小寫 運算子 和左右小 圓 括號構成,以 作為表示式的結束符。請編寫乙個程式檢查表示式中的左右圓括號是否匹配,若匹配,則返回 yes 否則返回 no 表示式長度小於255,左圓括號少於20個。include using namespace std int top 0 inl...