題目:、假設乙個表示式中可以包含三種括號:小括號,中括號,大括號,且這三種括號可以任意次序巢狀使用,
如:「3*[5+4]*」 ,編寫判斷表示式括號是否匹配的程式。表示式為字串。
解題思路:解決括號匹配問題我們要考慮的是優先順序,大家學過數學的都知道要想解決這類算式我們要做的就是去括號,去括號不能隨便去,要先去除最後寫的一組括號。意思就是如果大括號「{}」裡面還有小括號「()」我們要先去小括號再去大括號。意思就是後寫入的一組括號要先被處理。而先寫入的括號最後處理。這就是和我們棧的「先進後出,後進先出」的思想不謀而合。
首先我們遍歷字串,把「」或者「]」或者「)」右半部分時就要獲取棧頂的指標,如果棧頂指標指向的括號左半部分和右半部分匹配時那就說明這一組括號是匹配的,然後我們就這組匹配的括號出棧。到最後如果棧為空那就說明全部匹配,如果棧中有元素那就說明有部分括號不匹配導致沒有出棧。
具體的**實現如下
#include#includeusing namespace std;
int main()
";//字串
int i=0;
while(*b!='\0')
if(*b==')')//遇到「)」
else//不是則不匹配
}if(*b==']')
else
}if(*b=='}')
else
}b++;
} if(a.size()==0)
}
用棧解決括號匹配問題
define crt secure no warnings 1 include include include typedef char datatype define capacity 100 底層空間的總大小 typedef struct stack stack 初始化 void stackin...
括號匹配問題 棧
根據棧的先進後出特點 將遇到的左括號依次壓入棧中 遇到右括號時取出棧頂元素 退棧處理 比較棧頂元素和輸入的括號是否想匹配 注意 1.判斷的字串流的奇偶性 2.注意輸入的字元是否為所需的括號字元 3.考慮棧的棧頂和棧底是否溢位 4.棧在開始和結束時都應該是空的.所以匹配到最後還要判斷棧是否為空,若非空...
括號匹配問題(棧模擬)
在某個字串 長度不超過100 中有左括號 右括號和大小寫字母 規定 與常見的算數式子一樣 任何乙個左括號都從內到外與在它右邊且距離最近的右括號匹配。寫乙個程式,找到無法匹配的左括號和右括號,輸出原來字串,並在下一行標出不能匹配的括號。不能匹配的左括號用 標註,不能匹配的右括號用 標註.輸入包括多組資...