輸入一行符號,以#結束,判斷其中的對稱符號是否匹配。對稱符號包括:
輸出分為以下幾種情況:
(1)對稱符號都匹配,輸出 「 right. 「
(2) 如果處理到最後出現了失配,則輸出兩行:
第一行:matching failure.
第二行:loss of right character $$....
其中$$... 是按巢狀順序對應的右匹配符號。
(3)處理到某個符號時失配了,則輸出兩行或三行:
第一行: the n character '$' is wrong." ,
其中n是出錯符號的序號,$是出錯的符號;
第二行: loss of left character $.」
其中 $ 是當前符號的左匹配符號。
第三行:(如果有的話)loss of right character $$...」
其中$$... 是按巢狀順序對應的右匹配符號。
測試用例
用例一:
輸入:用例二:as(*x<))}>)#
輸出:
right.
輸入:因為隱藏用力比較多,博主也尋找了很多隱藏用例,因此這裡給出兩個博主自己摸索的用例。這也用例也都滿足,ac的概率更高一點(a.b)>#
輸出:
the 6 character 『>』 is wrong.
loss of left character <.
自創用例一:
輸入:自創用例二:>}#
輸出:
the 4 character 『>』 is wrong.
loss of left character <.
loss of right character }>}.
輸入:其實我這裡自己寫的也比較亂,做了一下午腦袋嗡嗡的。有幾個要注意的坑:#輸出:
matching failure.
loss of right character }}.
1.對「棧」的理解;
之前看過乙個博主寫的非常好,我的印象很深刻。他說,棧就像乙個口袋,先放進去的在最底下,只能最後取出來。最後放進去的在最頂上,能最先取出來。
我的棧定義寫了
變數:
存放棧元素的陣列 elemtype *elements;方法棧頂指示器top,並賦初值為-1(執行程式的時候因為沒賦初值報錯了)
棧的最大容量maxsize
棧的溢位處理void overflowprocess();其中本題只用到了進棧,出棧、判斷棧是否為空,棧制空(析構函式中)進棧 void push(elemtype x);
出棧 bool pop (elemtype x);
判斷棧是否為空 bool isempty()const;
判斷棧是否棧滿 bool isfull();
取棧頂內容 bool gettop(elemtype &x);
得到棧的容量 int getsize()const;
棧置空void makeempty();
2.本題難點
這個題我覺得最難的地方是考慮多種失配情況。
這個題的中心思路是:
將輸入的字串進行比對,壓進棧中→分析多種情況得到輸出
(可能是我的演算法太差了,我輸出這裡真是一言難盡,搞了好久)
(1)壓棧時,左側符號-(
seqstack
(int sz)
;//建構函式
~seqstack()
void
push
(elemtype x)
;//進棧
bool
pop(elemtype x)
;//出棧
bool
gettop
(elemtype &x)
;//取棧頂內容
bool
isempty()
const
bool
isfull()
const
intgetsize()
const
void
makeempty()
//friend ostream&operator<<(ostream &os,seqstack &s); //過載運算子<<};
seqstack::
seqstack
(int sz)
//建構函式
void seqstack::
overflowprocess()
maxsize+
=maxsize;
//棧空間擴大
delete
elements;
//釋放原來的連續空間
elements=newarray;
//改變elements指標
}void seqstack::
push
(elemtype x)
bool seqstack::
pop(elemtype x)
intmain()
if(str[i]
=='[')if
(str[i]
=='<')if
(str[i]=='
if(str[i]
==')'
)else
//如果棧頂不適配,那麼就有錯,記下來這個符號然後break;
}else
//如果棧是空的,那麼就錯了}if
(str[i]
==']'
)else
}else
//如果棧是空的}if
(str[i]
=='>'
)else
}else
//如果棧是空的}if
(str[i]
=='}'
)else
}else
//如果棧是空的
} i++;}
if(s.
isempty()
==true
)//空棧時
else
if(right1!=0)
//其他情況都是不適配。
//輸出缺失的左側運算子
if(you==
')')
if(you==
'}')
if(you==
']')
cout<<
"." //沒空棧時 else if(countit!=0) if(cun== ')') if(cun== '}') if(cun== ']') cout<< "."<} cout<< "loss of right character " ;while (s.isempty() !=true)" ; s. pop('if (s.elements[s.top] =='(')if (s.elements[s.top] =='[')if (s.elements[s.top] =='<')} cout<< "."<}return0; }**寫的有點亂,思路也比較亂,如果發現錯誤歡迎批評指正 輸入一行符號,以 結束,判斷其中的對稱符號是否匹配。對稱符號包括 輸出分為以下幾種情況 1 對稱符號都匹配,輸出 right.2 如果處理到最後出現了失配,則輸出兩行 第一行 matching failure.第二行 loss of right character 其中 是按巢狀順序對應的右匹配符號... 1 依據順序棧儲存結構的定義如下 利用以下的常用操作設計演算法並實現完成2 3題 define maxsize 100 typedef char selemtype typedef struct sqstack 除錯並測試常用操作如下 intinitstack sqstack s intstacke... 1 熟練掌棧和佇列的結構特點,掌握棧和佇列的順序儲存和鏈式儲存結構和實現。2 學會使用棧和佇列解決實際問題。二 實驗內容 棧的壓棧和出棧操作。三 include using namespace std const int stacksize 20 陣列長度為20 templateclass seqs...棧ADT應用 對稱符號匹配判斷
實驗三 棧與佇列的應用
實驗三 順序棧的基本操作實現及其應用