C語(yǔ)言解決堆棧括號(hào)匹配問題示例詳解
1.括號(hào)匹配問題就是當(dāng)遇到{( [這些左括號(hào)的時(shí) 將括號(hào)字符入棧
2.當(dāng)遇到右括號(hào)時(shí)判斷棧頂元素是不是與左括號(hào)匹配如果匹配就出棧
如果不匹配就直接結(jié)束程序(即括號(hào)匹配失?。?/p>
首先構(gòu)建棧
struct STACK
{
char num[10];
int top;
};
struct STACK* creatstack()
{
struct STACK* stack = new struct STACK;
assert(stack);
stack->top = -1;//0 -1這些根據(jù)直接所習(xí)慣去標(biāo)記棧頂 -1只是先置加 0后置加
return stack;
}
void push(struct STACK* stack, char ch)
{
stack->num[++stack->top] = ch;
}
void pop(struct STACK* stack)
{
stack->top--;
}
調(diào)用匹配函數(shù)
如果返回true即匹配成功 返回false即匹配失敗
bool Match(struct STACK* stack, char* match)
{
int len = strlen(match);
for (int i = 0; i < len; ++i)
{
if (match[i] == '{' || match[i] == '[' || match[i] == '(')
{
push(stack, match[i]);
}
if (match[i] == '}' )
{
if (stack->num[stack->top] == '{')
{
pop(stack);
}
else
{
return false;
}
}
if (match[i] == ')' )
{
if (stack->num[stack->top] == '(')
{
pop(stack);
}
else
{
return false;
}
}
if (match[i] == ']' )
{
if (stack->num[stack->top] == '[')
{
pop(stack);
}
else
{
return false;
}
}
}
if (stack->top == -1)
return true;
else
{
return false;
}
}
代碼調(diào)用
如果是輸出1說明匹配成功 輸出0匹配不成功
int main()
{
struct STACK* stack = creatstack();
char str[10] = "()[][]{}";
cout << Match(stack ,str)<< endl;
}
以上就是C語(yǔ)言堆棧括號(hào)匹配問題示例詳解的詳細(xì)內(nèi)容,更多關(guān)于C語(yǔ)言堆棧括號(hào)匹配的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C語(yǔ)言職工管理系統(tǒng)設(shè)計(jì)
這篇文章主要為大家分享了一份C語(yǔ)言職工管理系統(tǒng)設(shè)計(jì),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10
用c語(yǔ)言根據(jù)可變參數(shù)合成字符串的實(shí)現(xiàn)代碼
本篇文章是對(duì)用c語(yǔ)言根據(jù)可變參數(shù)合成字符串的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
C++中實(shí)現(xiàn)隊(duì)列類鏈?zhǔn)酱鎯?chǔ)與棧類鏈?zhǔn)酱鎯?chǔ)的代碼示例
這篇文章主要介紹了C++中實(shí)現(xiàn)隊(duì)列類鏈?zhǔn)酱鎯?chǔ)與棧類鏈?zhǔn)酱鎯?chǔ)的代碼示例,通過注釋來說明,直接上代碼,簡(jiǎn)單粗暴XD 需要的朋友可以參考下2016-03-03
基于C++的攝像頭圖像采集及拼接程序的簡(jiǎn)單實(shí)現(xiàn)
本程序是在?ubuntu14.04?平臺(tái)下實(shí)現(xiàn)的,在本項(xiàng)目目錄下,已經(jīng)有編譯生成的可執(zhí)行程序,其中Camera_to_Frmae.cpp是我們從雙攝像頭實(shí)時(shí)抓取單幀圖像的源碼,對(duì)基于C++的攝像頭圖像采集及拼接程序的實(shí)現(xiàn)感興趣的朋友一起看看吧2022-01-01
使用C++的string實(shí)現(xiàn)高精度加法運(yùn)算的實(shí)例代碼
下面小編就為大家?guī)硪黄褂肅++的string實(shí)現(xiàn)高精度加法運(yùn)算的實(shí)例代碼。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-09-09
詳解C++成員函數(shù)的override和final說明符的用法
這篇文章主要介紹了詳解C++成員函數(shù)的override和final說明符的用法,分別用于重寫和禁止繼承類,要的朋友可以參考下2016-01-01
C語(yǔ)言初識(shí)變量常量字符串轉(zhuǎn)義符及注釋方式簡(jiǎn)介
最強(qiáng)的C語(yǔ)言筆記,此處對(duì)于C語(yǔ)言的基礎(chǔ)部分做一個(gè)簡(jiǎn)要的介紹,作者實(shí)屬初學(xué),寫博客也是作者學(xué)習(xí)的一個(gè)過程,若文中內(nèi)容有理解不到位或者有不當(dāng)之處,還請(qǐng)朋友們不吝指正2021-11-11

