數學表示式中括號必須成對出現,比如(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 的字串 請注意...