檢測算術表示式中括號 是否合法 棧的應用

2021-09-14 02:41:00 字數 849 閱讀 9016

數學表示式中括號必須成對出現,比如(a+b)c、a(ln(x)-x)。否則即為不合法的表示式,如a*(b+c*(d+1)。

基於乙個』(『必須有與之對應的』)『的思想,可以用棧來判斷表示式是否合法。

讓表示式中字元逐一入棧,每個』)『可以帶走乙個』(』,判斷最後』(『是否被帶完,且棧空時沒有遇到』)』

#include

#include

#define maxsize 100

//表示式的最大長度

/*函式原型宣告*/

void

find_elsment

(char exp,

int n)

;//找到表示式(字串)中的括號

intmatch

(char exp,

int n)

;//判斷括號使用是否合法

intmain()

intmatch

(char exp,

int n)}if

(top==-1

)//棧空

return1;

else

return0;

}void

find_elsment

(char exp,

int n)

i--; count++;}

}printf

("不是括號的字元個數count=%d\n"

,count)

;//把尾部的亂碼刪掉

for(

int i=

1;i<=count;i++

) exp[n-i]

=null

;}

判斷算術表示式中的括號是否匹配

問題描述 假設乙個算術表示式中包含圓括號 方括號和花括號3種型別的括號,編寫乙個演算法來判斷表示式中的括號是否匹配,以字元 作為算術表示式的結束符。解決問題思想 遇見左括號就進棧,遇見右括號就出棧。當括號匹配時上一次進棧和本次出棧的括號肯定配對,所以不需要迴圈依次出棧判斷括號是否配對 此處之前沒有想...

棧 算術表示式

將乙個算術表示式 即中綴形式 轉化成其字尾形式,並算出答案。include include include include include include using namespace std using namespace std bool isoperator char ch return f...

判斷表示式是否合法(推薦 )

time limit 1 sec memory limit 4 mb submit 375 solved 31 submit status 設s是乙個合法的表示式,e為乙個數字字串行,則合法的表示式可以表示為 e,e,e,s s s s s s s s s s s 等。e可以是全 0 的字串 請注意...