括号匹配代码实现--通过栈实现

来源:互联网 发布:淘宝企业店发布产品 编辑:程序博客网 时间:2024/06/06 00:18

        很久没有看数据结构和算法相关的内容了,今天偶然看到有人问这个问题,就使用C写了一段代码,实现括号匹配。该程序修改下,可以设计成通用的字符串匹配函数。具体看个人是怎么设计的。

        偶尔确实需要练练手,不然一些方法真很容易忘记。编写的代码如下。


using namespace std;//假定bracketsStr只包含大 中 小括号BOOL BracketsIsMatch(char *bracketsStr,int *noMatchIndex){if(!bracketsStr){*noMatchIndex = -1;return TRUE;}stack<char> bracketStack;int len = strlen(bracketsStr);for(int i=0;i<len;i++){//左括号,入栈if('(' == bracketsStr[i] || '[' == bracketsStr[i] || '{' == bracketsStr[i]){bracketStack.push(bracketsStr[i]);continue;}//右括号,栈为空,不匹配if(bracketStack.empty()){*noMatchIndex = i;return FALSE;}//右括号,栈顶出栈char topBracket = bracketStack.top();bracketStack.pop();if( ('(' == topBracket && ')' == bracketsStr[i]) ||('[' == topBracket && ']' == bracketsStr[i]) ||('{' == topBracket && '}' == bracketsStr[i]) ){continue;}*noMatchIndex = i;return FALSE;}if(!bracketStack.empty()){*noMatchIndex = len-1;return FALSE;}*noMatchIndex = -1;return TRUE;}int main(int argc,char *argv[]){int noMatchIndex = 0;char *p = "()(){[(]}";if(!BracketsIsMatch(p,&noMatchIndex) && noMatchIndex != -1){printf("No Match,index = %d,char = %c\r\n",noMatchIndex,*(p+noMatchIndex));}else{printf("Match ... \r\n");}return 0;}


0 0
原创粉丝点击