括號匹配問題(C語言,堆疊求解)

2021-10-03 00:15:09 字數 822 閱讀 8833

在某個字串(長度不超過100)中有左、右括號和大小寫字母;規定任何乙個左括號都從內到外與在它右邊且距離最近的有括號匹配。寫乙個程式,找到無法匹配的左右括號,輸出原來字串,並在下一行為不能匹配的左右括號做標記。不能匹配的左括號用「$」標記,不能匹配的右括號用「?」標記。成功匹配的直接顯示為空格(即不做標記)。

括號匹配問題是堆疊的典型應用之一,每乙個右括號必定與其之前未被匹配的左括號裡頭最右邊的那個匹配。我們可以從左到右遍歷字串,遇到左括號就壓入堆疊等待匹配,遇到右括號就檢查堆疊,若堆疊為空,則無法匹配,標記?,若堆疊非空,則匹配成功,全部掃面完成後,檢查堆疊是否有餘下的左括號未被匹配,有的話標記$即可。

#include #include using namespace std;

stacks; //定義乙個堆疊

char str[110];//儲存輸入字串

char ans[110];//儲存輸出字串

int main()

else if (str[i]==')')

else ans[i]='?'; //如果堆疊為空

}else ans[i]=' ';//如遇其他字元

} while(!s.empty())

ans[i]=0;//為了使輸出形成字串,在其最後乙個字元後新增乙個空字元

//輸出原字串與答案字串

堆疊入門 括號匹配問題

堆疊入門 括號匹配問題 時間限制 1 秒 記憶體限制 32 兆 題目描述 在某個字串 長度不超過 100 中有左括號 右括號和大小寫字母 規定 與常見的算數式子一樣 任何乙個左括號都從內到外與在它右邊且距離最近的 右括號匹配。寫乙個程式,找到無法匹配的左括號和右括號,輸出原來字串,並在下一行標出不能...

括號匹配問題(借助棧求解)

給你乙個長度為 n 的由 和 組成的括號序列,你能找出這個序列中最長合法括號子串行麼?合法括號序列是指,在這個序列中,所有的左括號都有唯一的右括號匹配 所有的右括號都有唯一的左括號匹配。例如 便是乙個長度為 10 的合法括號序列,而 則不是。資料輸入 輸入只有一行,是乙個長度為 n 1 n 10 6...

DS堆疊 括號匹配

問題 c ds堆疊 括號匹配 時間限制 1 sec 記憶體限制 128 mb 提交 396 解決 343 提交 狀態 討論版 題目描述 處理表示式過程中需要對括號匹配進行檢驗,括號匹配包括三種 和 和 例如表示式中包含括號如下 1234 5678 9101112 從上例可以看出第1和第2個括號匹配,...