給定一串字元,不超過100個字元,可能包括括號、數字、字母、標點符號、空格,程式設計檢查這一串字元中的( ) ,[ ],是否匹配。首先需要使用stl容器stack(即棧,其用法為先進後出)輸入在一行中給出一行字串,不超過100個字元,可能包括括號、數字、字母、標點符號、空格。
如果括號配對,輸出yes,否則輸出no。
sin(10+20)
yes
]
no
對於這道題的思路就是先把括號挨個存入棧內,然後先存入的元素就為"」,「]」,「)「,就取棧頂元素與元素進行比較,若括號匹配,就把棧頂元素刪除。
我這個寫的還是不夠簡潔,下面引用一段別人的部落格
在遍歷字串時,
遇見左括號則入棧,
遇見右括號則判斷棧是否為空,
不為空則彈出棧頂進行比對,
如果配對則不作處理,
不配對則將標記賦0,跳出
為空則將標記賦0,跳出
輸出時判斷標記是否為真且棧是否為空
重點:這題的坑在於你在遇見右括號時不能直接彈出棧頂,因為棧可能為空,這樣就造成了段錯誤,所以應該加乙個判斷棧頂是否為空的條件
#include#include#include//因為使用了getchar()
using namespace std;
typedef struct
sqlist;
int main()
if(l->top==0) cout<<"yes";//如果棧為空就說明括號剛好匹配。
else
cout<<"no";
return 0;
}
括號匹配 問題總結
大家都知道算術表示式中,括號必須配對,現在任意給出乙個算術表示式,判斷其括號是否配對。如果配對,輸出yes,否則輸出no。含多組測試資料,輸入首先是乙個整數tt表示測試資料組數 0對應每組測試資料,輸出一行結果。input output 2 32 78 23 78 32 78 23 78 yes n...
括號匹配問題的總結
括號匹配問題有若干種,這裡分析其中一種括號裡有數字有字元,然後求的最終結果的問題。給出兩道例題,leetcode224和leetcode394。題目描述 實現乙個基本的計算器來計算乙個簡單的字串表示式的值。字串表示式可以包含左括號 右括號 加號 減號 非負整數和空格 示例輸入 1 4 5 2 3 6...
括號匹配問題
時間限制 3000 ms 記憶體限制 65535 kb 難度 3 描述 現在,有一行括號序列,請你檢查這行括號是否配對。輸入第一行輸入乙個數n 0輸出 每組輸入資料的輸出佔一行,如果該字串中所含的括號是配對的,則輸出yes,如果不配對則輸出no 樣例輸入 3 樣例輸出 no noyes 基本演算法思...