判断一个字符串中括号是否匹配
生活随笔
收集整理的這篇文章主要介紹了
判断一个字符串中括号是否匹配
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
從鍵盤讀入一個字符串,其中只含有() {} [ ]?,判斷該字符串中的每種括號是否成對出現(xiàn)。
提示:可借助棧來實現(xiàn),括號必須配對出現(xiàn),如()[ ]{},這是匹配的括號,如([{])},這是不匹配的括號(中間無空格)。
輸入描述:
輸入一個字符串(中間不包含空格)
輸出描述:
匹配輸出yes,否則輸出no
輸入樣例:
(([{}]))輸出樣例:
yes
思路:
1. 括號匹配的四種可能性:
①左右括號配對次序不正確②右括號多于左括號
③左括號多于右括號
④左右括號匹配正確
2. 算法思想:
1.順序掃描算數(shù)表達(dá)式(表現(xiàn)為一個字符串),當(dāng)遇到三種類型的左括號時候讓該括號進(jìn)棧;
2.當(dāng)掃描到某一種類型的右括號時,比較當(dāng)前棧頂元素是否與之匹配,若匹配,退棧繼續(xù)判斷;
3.若當(dāng)前棧頂元素與當(dāng)前掃描的括號不匹配,則左右括號配對次序不正確,匹配失敗,直接退出;
4.若字符串當(dāng)前為某種類型的右括號而堆棧已經(jīng)空,則右括號多于左括號,匹配失敗,直接退出;
5.字符串循環(huán)掃描結(jié)束時,若堆棧非空(即堆棧尚有某種類型的左括號),則說明左括號多于右括號,匹配失敗;
6.正常結(jié)束則括號匹配正確。
#include <iostream> #include <cstring> #include <stack>using namespace std;int main() {stack<char>a;int flag=1,i;char ch[100];cin>>ch;for(i=0;i<strlen(ch);i++){if(ch[i]=='{'||ch[i]=='('||ch[i]=='[')a.push(ch[i]);else{if(a.empty()==true){flag=0;break;}else if((ch[i]=='}'&&a.top()=='{')||(ch[i]==')'&&a.top()=='(')||(ch[i]==']'&&a.top()=='['))a.pop();else{flag = 0;break;}}}if(flag==0)cout<<"no";elsecout<<"yes"; }
總結(jié)
以上是生活随笔為你收集整理的判断一个字符串中括号是否匹配的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python手机_Python手机号码匹
- 下一篇: 完美解决com.google.proce