括號主要有:(){}
//括號匹配情況有:
/*左括號多於右括號
右括號多於左括號
左右括號配對次序不正確
左、右括號匹配正確
思路為:
//---------括號匹配問題---------
//說明:解決圓括號、方括號、花括號的層層巢狀是否正確。
//如,程式設計工具的符合提示。
////對於解決帶運算的相關解決方案,如(1+2)*5+6=?等中綴算術表示式
//可依據此解決思路,順帶把數字壓入堆疊中,遇到匹配的括號再彈出進行運算,再壓入堆疊
////括號匹配情況有:
/*1. 左括號多於右括號
2. 右括號多於左括號
3. 左右括號配對次序不正確
4. 左、右括號匹配正確
*/#include
#include
#define maxstacksize 100
typedef
char datatype;
typedef
struct
seqstack;
//初始化順序堆疊s
void
stackinitiate
(seqstack* s)
//飛空否
//判斷順序堆疊s是否空,非空則返回1,否則返回0
intstacknotempty
(seqstack s)
//入棧
//把資料元素的值x存入順序堆疊s中,入棧成功返回1,否則返回0
intstackpush
(seqstack* s, datatype x)
else
}//出棧
//取出順序堆疊s的棧頂資料元素值由引數d帶回,出棧成功返回1,否則返回0
intstackpop
(seqstack* s, datatype* d)
else
}//取棧頂資料元素
//取順序棧頂s的當前棧頂資料元素值由引數d帶回,成功返回1,否則返回0
intstacktop
(seqstack s, datatype* d)
else
}//判斷有n個字元的字串exp匹配是否正確
void
isbracketcorrect
(char exp,
int n)
else
if(exp[i]
==')'
&&stacknotempty
(mystack)
&&stacktop
(mystack,
&c)&& c ==
'(')
else
if(exp[i]
==')'
&&stacknotempty
(mystack)
&&stacktop
(mystack,
&c)&& c !=
'(')
else
if(exp[i]
==']'
&&stacknotempty
(mystack)
&&stacktop
(mystack,
&c)&& c ==
'[')
else
if(exp[i]
==']'
&&stacknotempty
(mystack)
&&stacktop
(mystack,
&c)&& c !=
'[')
else
if(exp[i]
=='}'
&&stacknotempty
(mystack)
&&stacktop
(mystack,
&c)&& c ==
'else
if(exp[i]
=='}'
&&stacknotempty
(mystack)
&&stacktop
(mystack,
&c)&& c !=
'elseif(
((exp[i]
==')')||
(exp[i]
==']')||
(exp[i]
=='}'))
&&!stacknotempty
(mystack))}
if(stacknotempty
(mystack)
)else
}//測試主函式:
void
main()
";//案例1,左右括號匹配次序不正確
char b=
"(()))abc"
;//案例2,右括號多於左括號
char c=
"(()()abc"
;//案例3,左括號多於又括號
char d=
"(())abc"
;//案例4,左右括號匹配正確
//各個字串的長度
int n1 =
strlen
(a);
int n2 =
strlen
(b);
int n3 =
strlen
(c);
int n4 =
strlen
(d);
//測試
isbracketcorrect
(a,n1)
;isbracketcorrect
(b,n2)
;isbracketcorrect
(c,n3)
;isbracketcorrect
(d,n4)
;}
括弧匹配檢驗 括號匹配問題
題目描述 假設表示式中允許包含兩種括號 圓括號和方括號,其巢狀的順序隨意,如 或 等為正確的匹配,或 或 均為錯誤的匹配。現在的問題是,要求檢驗乙個給定表示式中的括弧是否正確匹配?輸入乙個只包含圓括號和方括號的字串,判斷字串中的括號是否匹配,匹配就輸出 ok 不匹配就輸出 wrong 輸入乙個字串 ...
遞迴應用之括號匹配檢驗
括號匹配檢驗還可以用棧來解決,參見我的另一篇文章 棧的應用之括號匹配檢驗 這裡給出乙個c 程式,結合注釋來看是如何實現的。include using namespace std bool judge char str 括號檢驗主體函式 bool match char char,int 遞迴呼叫的匹配...
棧的應用 括號匹配檢驗
輸入包含括號的表示式,包含3中括號 圓括號 方括號,大括號 其巢狀順序隨意,即 或 等均為正確的輸入格式,檢驗輸入表示式中的括號是否匹配。源 bracketmatch.h ifndef bracketmatch h define bracketmatch h define maxsize 100 t...