在編譯器中,都有這麼乙個左右符號匹配的功能,這裡通過棧來模擬實現這一功能;main.c這裡採用了**復用的方法,即使用了linkstack鏈棧,詳見《linkstack鏈棧》;
#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...