各位程序员在写代码的时候,使用的编译器(如VisualStudio、Eclipse)都有左右括号的自己主动匹配功能,假设写错了,它就会即时编译,提示错误。
那么如今。就利用栈的特点就简单实现了这一功能。
能够实现基本‘ { ’、‘ [ ’、‘(’、‘ “ ’、‘ ‘ ’、’ < ‘的左右匹配功能。
基本实现思路:
1,将代码视为一条字符串。创建栈空间
2,遍历字符串。遇到左符号->压栈
3,遇到右符号。弹栈,弹出的左符号与右进行匹配
4,运行步骤2 。直到遍历到' '(字符串结尾)
详细代码例如以下:
因为使用到了栈的代码。这里就不再次贴上栈的代码了,请參阅:栈的实现与操作(C语言实现) 。相关操作均已实现。
// 栈应用语法匹配.cpp : 定义控制台应用程序的入口点。// #include "stdafx.h" #include "LinkStack.h" #include <stdlib.h> //推断是否为左符号 int isLeft(char ch) { int ret = 0; switch (ch) { case '{': case '(': case '[': case '"': case ''': case '<': ret = 1; break; default: ret = 0; break; } return ret; } //推断是否为右符号 int isRight(char c) { int ret = 0; switch(c) { case '>': case ')': case ']': case '}': case ''': case '"': ret = 1; break; default: ret = 0; break; } return ret; } //匹配左右符号 int match(char left,char right) { int ret = 0; switch (left) { case '{': ret = (right == '}'); break; case '[': ret = (right == ']'); break; case '(': ret = (right == ')'); break; case '"': ret = (right == '"'); break; case ''': ret = (right == '''); break; case '<': ret = (right == '>'); break; default: ret = 0; break; } return ret; } //匹配算法 int matcher(const char * code) { LinkStack * stack = LinkStack_Create();//创建栈 int ret = 0; int i = 0; while (code[i] != '