括號匹配檢測 棧的應用

2021-08-27 06:22:08 字數 1582 閱讀 7611

周一是我女朋友的生日,無奈公司的介面需要我去除錯,心裡也確實放不下公司的事情,結果週末兩天都在公司除錯加班,今天周一我和女友都上班,唉,太感謝我女友了,乙個男人的高度很大程度上取決於身邊的女人啊,祝我寶貝璐璐生日快樂。

在某個字串(長度不超過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 掌握使用棧的原理來解決表示式中的括號配對問題。二 實驗內容 假設乙個算術表示式中包含圓括弧 方括弧三種型別的括弧,編寫乙個程式用於判別表示式中括弧是否正確配對...