在某個字串(長度不超過100)中有左括號、右括號和大小寫字母;規定(與常見的算數式子一樣)任何乙個左括號都從內到外與在它右邊且距離最近的右括號匹配。寫乙個程式,找到無法匹配的左括號和右括號,輸出原來字串,並在下一行標出不能匹配的括號。不能匹配的左括號用」$」標註,不能匹配的右括號用」?」標註.
輸入包括多組資料,每組資料一行,包含乙個字串,只包含左右括號和大小寫字母,字串長度不超過100。
注意:cin.getline(str,100)最多只能輸入99個字元!
對每組輸出資料,輸出兩行,第一行包含原始輸入字元,第二行由」","?"和空格組成,"」和」?」表示與之對應的左括號和右括號不能匹配。
)(rttyy())sss)()(rttyy())sss)(
? ?$括號匹配問題,堆疊的典型應用。由於每乙個右括號,必定是在與其之前的所有未被匹配的左括號中最靠右的乙個匹配。若我們按照從左至右的順序遍歷字串,並將遇到的所有左括號都放入堆疊中等待匹配;若在遍歷過程中遇到乙個右括號,由於按照從左到右的順序遍歷字串,若此時堆疊非空,那麼棧頂左括號即為與其匹配的左括號;相反,若堆疊為空,則表示在其之前不存在未被匹配的左括號,匹配失敗。
引用自《王道機試指南》
#include
#include
#include
using namespace std;
string input;
char flags[105];
int main(){
while(cin>>input){
stack s; //設定為區域性變數 !!!
memset(flags,0,sizeof(flags)); //這步操作很重要!!!
int len=input.length();
for(int i=0;i
九度OJ 1153 括號匹配問題
此題乃學習使用stack模板第一題。收穫了以下知識點 pop 返回void,故想要獲取棧頂並刪除需要打出top pop組合拳 stack模板申請出的物件長度是動態的,無需靜態分配 題目描述 在某個字串 長度不超過100 中有左括號 右括號和大小寫字母 規定 與常見的算數式子一樣 任何乙個左括號都從內...
棧的應用 九度OJ 1153 括號匹配問題
題目描述 在某個字串 長度不超過100 中有左括號 右括號和大小寫字母 規定 與常見的算數式子一樣 任何乙個左括號都從內到外與在它右邊且距離最近的右括號匹配。寫乙個程式,找到無法匹配的左括號和右括號,輸出原來字串,並在下一行標出不能匹配的括號。不能匹配的左括號用 標註,不能匹配的右括號用 標註.輸入...
學習筆記 九度OJ 題目1153 括號匹配問題
題目1153 括號匹配問題 時間限制 1 秒 記憶體限制 32 兆 特殊判題 否 提交 1759 解決 786 題目描述 在某個字串 長度不超過100 中有左括號 右括號和大小寫字母 規定 與常見的算數式子一樣 任何乙個左括號都從內到外與在它右邊且距離最近的右括號匹配。寫乙個程式,找到無法匹配的左括...