棧的應用 左右符號匹配

2021-08-07 12:44:20 字數 1296 閱讀 9301

在編譯器中,都有這麼乙個左右符號匹配的功能,這裡通過棧來模擬實現這一功能;

這裡採用了**復用的方法,即使用了linkstack鏈棧,詳見《linkstack鏈棧》;

main.c

#include 

#include

#include "linkstack.h"

//判斷是否為左符號

int isleft(char c)

return ret;

}//判斷是否為右符號

int isright(char c)

':case

'\'':

case

'\"':

ret = 1;

break;

default:

ret = 0;

break;

}return ret;

}//匹配左右符號是否一對

int match(char left, char right)

');break;

case

'\'':

ret = (right == '\'');

break;

case

'\"':

ret = (right == '\"');

break;

default:

ret = 0;

break;

}return ret;

}//左右符號匹配邏輯

int scanner(const

char* code)

//end 1 if

if( isright(code[i]) )

}//end 2 if

i++;

}if( (linkstack_size(stack) == 0) && (code[i] == '\0') )//棧為空時,切字串到結尾時,則成功

else

linkstack_destroy(stack);

return ret;

}int main(int argc, char *argv)

";scanner(code);

return

0; }

1.isleft

2.isright

3.match

4.scanner

棧ADT應用 對稱符號匹配判斷

輸入一行符號,以 結束,判斷其中的對稱符號是否匹配。對稱符號包括 輸出分為以下幾種情況 1 對稱符號都匹配,輸出 right.2 如果處理到最後出現了失配,則輸出兩行 第一行 matching failure.第二行 loss of right character 其中 是按巢狀順序對應的右匹配符號...

棧的應用 編譯器的符號匹配

演算法 1 從第乙個字元開始掃瞄 2 當遇見普通字元時候忽略,遇見做字元壓入棧。3 當遇見右符號時候從棧中彈出棧頂符號 匹配成功,繼續讀入下一字元 匹配失敗,立即停止並報錯 成功 所有字元掃瞄完畢,且棧為空 失敗 匹配失敗或者所有字元掃瞄完畢但棧不是空的。偽 int scanner const ch...

棧的應用 平衡符號

僅對圓括號 方括號 花括號 進行校驗 演算法 建立乙個空棧,讀入字元至檔案尾,如果是 開放字元將其壓棧,如果是閉合字元,此時棧空則 報錯,否則從棧中彈出乙個字元,如果不是對應的開 放字元,則報錯,在檔案尾棧非空報錯。include include struct node typedef struct...