堆疊入門 括號匹配問題

2022-07-05 18:30:17 字數 1589 閱讀 8796

堆疊入門-括號匹配問題

時間限制:1 秒   記憶體限制:32 兆

題目描述:

在某個字串(長度不超過 100)中有左括號、右括號和大小寫字母;規定 (與常見的算數式子一樣)任何乙個左括號都從內到外與在它右邊且距離最近的 右括號匹配。寫乙個程式,找到無法匹配的左括號和右括號,輸出原來字串, 並在下一行標出不能匹配的括號。不能匹配的左括號用"$"標註,不能匹配的右括 號用"?"標註. 

輸入:

輸入包括多組資料,每組資料一行,包含乙個字串,只包含左右括號和大 小寫字母,字串長度不超過 100。

輸出:

對每組輸出資料,輸出兩行,第一行包含原始輸入字元,第二行由"$","?" 和空格組成,"$"和"?"表示與之對應的左括號和右括號不能匹配。

樣例輸入:

)(rttyy())sss)(
樣例輸出:

)(rttyy())sss)( 

?          ?$

解題思路:

括號匹配問題是堆疊的乙個典型應用。由於每乙個右括號,必定是與在其之前的所有未被匹配的左括號中最靠右的乙個匹配。若我們按照從左至右的順序遍歷字串,並將遇到的所有左括號都放入堆疊中等待匹配;若在遍歷過程中遇到乙個右括號,由於按照從左向右的順序遍歷字串,若此時堆疊非空,那麼棧頂左括號即為與其匹配的左括號;相反,若堆疊為空,則表示在其之前不存在未被匹配的左括號,匹配失敗。

注意事項:

有乙個很有趣的事情,char a[105]如果定義為全域性變數會自動初始化,在結尾加上'\0'。但是如果定義在main函式中,則不會初始化,如果整體輸出結尾會輸出一系列「燙」,需要手動初始化,比如寫為char a[105] =

#include#include

#include

#include

#include

using

namespace

std;

stack

t;char s[105

];char a[105];//

答案int

main()

}else a[i] = '';

}if (!t.empty())

printf(

"%s\n

", a);

}system(

"pause");

return0;

}

#include#include

#include

using

namespace

std;

intmain()

else s[i]='?'

; }

else s[i]='';

}while(!q.empty())

printf(

"%s\n

",s);

return0;

}

二刷

DS堆疊 括號匹配

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

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

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

判斷括號是否匹配 堆疊

1.有效的括號 給定乙個只包括 的字串,判斷字串是否有效。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。注意空字串可被認為是有效字串。示例 1 輸入 輸出 true 示例 2 輸入 輸出 true 示例 3 輸入 輸出 false 示例 4 輸入 輸出 false 示...