括号的匹配(表达式的合法性检查)
生活随笔
收集整理的這篇文章主要介紹了
括号的匹配(表达式的合法性检查)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
【問(wèn)題描述】
假設(shè)一個(gè)表達(dá)式由英文字母(小寫(xiě))、運(yùn)算符(+、-、*、/)和左右小(圓)括號(hào)構(gòu)成,以“@”作為表達(dá)式的結(jié)束符。
請(qǐng)編寫(xiě)一個(gè)程序檢查表達(dá)式中的左右圓括號(hào)是否匹配,若匹配,則返回“YES”;否則返回“NO”。
假設(shè)表達(dá)式長(zhǎng)度小于255,左圓括號(hào)少于20個(gè)。
【算法分析】
假設(shè)輸入的字符串存儲(chǔ)在c中(char c[256])。
可以定義一個(gè)棧:char s[maxn+1];int top;
用它來(lái)存放表達(dá)式中從左往右的左圓括號(hào)(maxn=20)。
【算法思路】
順序(從左往右)掃描表達(dá)式的每個(gè)字符c[i],若是“( ”,則讓它進(jìn)棧;若遇到的是“)”,則讓棧頂元素出棧;
當(dāng)棧發(fā)生下溢或當(dāng)表達(dá)式處理完畢而棧非空時(shí),都表示不匹配,返回“NO”;否則表示匹配,返回“YES”。
【代碼分析】
#include <cstdio> #include <cstdlib> #define maxn 20 using namespace std; char c[256]; bool judge(char c[256]) {int top=0,i=0;while(c[i]!='@'){if(c[i]=='(') top++;if(c[i]==')'){if(top>0) top--;else return false;}i++;}if(top!=0) return false;//檢查棧是否為空,不空則說(shuō)明有未匹配的括號(hào)。else return true; } int main () {scanf("%s",c);if(judge(c)) printf("YES");else printf("NO");return 0; }總結(jié)
以上是生活随笔為你收集整理的括号的匹配(表达式的合法性检查)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 百练1089:数字反转
- 下一篇: 编程求一个后缀表达式的值