周一是我女朋友的生日,無奈公司的介面需要我去除錯,心裡也確實放不下公司的事情,結果週末兩天都在公司除錯加班,今天周一我和女友都上班,唉,太感謝我女友了,乙個男人的高度很大程度上取決於身邊的女人啊,祝我寶貝璐璐生日快樂。
在某個字串(長度不超過100)中有左括號、右括號和大小寫字母;規定(與常見的算數式子一樣)任何乙個左括號都從內到外與在它右邊且距離最近的右括號匹配。寫乙個程式,找到無法匹配的左括號和右括號,輸出原來字串,並在下一行標出不能匹配的括號。不能匹配的左括號用"$"標註,不能匹配的右括號用"?"標註.
輸入包括多組資料,每組資料一行,包含乙個字串,只包含左右括號和大小寫字母,字串長度不超過100。
注意:cin.getline(str,100)最多只能輸入99個字元!
對每組輸出資料,輸出兩行,第一行包含原始輸入字元,第二行由"$","?"和空格組成,"$"和"?"表示與之對應的左括號和右括號不能匹配。
)(rttyy())sss)(
)(rttyy())sss)(? ?$
括號匹配是典型的棧的應用,因此我採用鏈棧,思路如下:
(1)第一次遍歷輸入字串,
1.是左括號,則入棧,同時標記陣列的相應位置置空格
2.是右括號,則檢測棧是否為空,不為空,則判斷有對應的左括號,同時出棧;為空,則沒有對應的左括號,標記陣列置『?』
(2)第二次遍歷輸入字串,
1.是右括號,則入棧
2.是左括號,則檢測棧是否為空,不為空,則判斷有對應的右括號,同時出棧;為空,則沒有對應的左括號,標記陣列置『$』
#include #include #include //採用鏈棧的資料結構
struct stacknode
;typedef struct
linkstack;
/** * description:初始化鏈棧
*/void initstack(linkstack *s)
/** * description;判斷棧是否為空
*/int stackempty(linkstack *s)
/** * description:入棧操作
*/void push(linkstack *s, char str)
/** * description:出棧操作
*/char pop(linkstack *s)
int main()
else
break;
default:
flag[i] = ' ';
break;
}} initstack(s);
for(i = len - 1; i >= 0; i --)
else
break;
default:
break;
}} //列印輸出
printf("%s\n%s\n",input,flag);
memset(input,'\0',sizeof(input));
memset(flag,'\0',sizeof(flag));
} return 0;
}
c語言 括號匹配檢測(棧的應用)
括號匹配檢測,對於一串帶括號的字元 1.如果是左括號,入棧 2.如果是右括號,與棧頂元素比較,若形成括號對,則棧頂左括號出棧 若不能形成括號對,則括號不能匹配 include include define init size 6 初始棧空間 define incre size 2 佔空間增量 棧結構...
棧應用 括號匹配
假設表示式中允許包含兩種括號 圓括號和方括號。編寫乙個演算法判斷表示式中的括號是否正確配對。由括號構成的字串,包含 如果匹配輸出yes,否則輸出no。複製 yes解決思想 拿到字串後,遍歷字串,當遇到左括號就進棧,右括號棧頂元素出棧,如果括號是匹配的,則最終棧空。include includetyp...
棧的應用 括號匹配
3.1棧的應用 括號匹配 一 實驗目的1 掌握堆疊特殊線性表的儲存方式的基本操作方法。2 掌握堆疊後進先出運算原則在解決實際問題中的應用。3 掌握使用棧的原理來解決表示式中的括號配對問題。二 實驗內容 假設乙個算術表示式中包含圓括弧 方括弧三種型別的括弧,編寫乙個程式用於判別表示式中括弧是否正確配對...