C++ VS2010 括号匹配 求强人解答

///////////////////////////主函数//Match.cpp:定义控制台应用程序的入口点。//#include"stdafx.h"#include<... ///////////////////////////主函数
// Match.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
#include <string.h>
#include <stdio.h>
#include "stack.h"
#include "error.h"

int _tmain(int argc, _TCHAR* argv[])
{
Stack<int> p(MaxLength);
char expr[MaxLength];
cout<<"jh[op"<<endl;
cin.getline(expr,MaxLength);
cout<<"The pairs of matching parentheses in"<<endl;
puts(expr);
cout<<"are"<<endl;
p.PrintMatchedPairs(expr);
return 0;
}
if(expr[i-1]=='['||expr[i-1]==']')
{
if(expr[i-1]=='[') s.Add(i); //左括号压栈
else if(expr[i-1]==']'&&s.Top( )=='[')//就是这里总出现问题 try{s.Delete(j); //右括号弹栈
cout<<j<<' '<<i<<endl;}
catch(OutOfBounds) //栈顶为空
{ cout<<"No match for right parenthesis at"<<i<<endl;}
else if(expr[i-1]==']'&&s.Top( )!='[')
cout<<"No Match for right parenthesis at"<<j;

}
if(expr[i-1]=='{'||expr[i-1]=='}')
{
if(expr[i-1]=='{') s.Add(i); //左括号压栈
else if(expr[i-1]=='}'&&s.Top( )=='{')
try{ s.Delete(j); //右括号弹栈
cout<<j<<' '<<i<<endl;}
catch(OutOfBounds) //栈顶为空
{ cout<<"No match for right parenthesis at"<<i<<endl;}
else if(expr[i-1]=='}'&&s.Top( )!='{')
cout<<"No Match for right parenthesis at"<<j;

}
}
////未匹配的(
while(!s.IsEmpty())
{
s.Delete(j);
cout<<"没有匹配项"<<j<<endl;
}
}
展开
 我来答
navydun
2011-10-14 · 超过36用户采纳过TA的回答
知道小有建树答主
回答量:121
采纳率:0%
帮助的人:93.2万
展开全部
#include <stdio.h>
#include <stdlib.h>
#define STACKSIZE 50 //初始栈的大小
#define STACKSIZE_increase 10 //增加栈的空间
typedef struct Sqstack //定义栈
{
char *base;
char *top;

int stacksize;

}Sqstack;
Sqstack S;

void Initstack()//创建栈
{
S.base=(char*)malloc(S.stacksize*sizeof(char));//申请结点
if(!S.base)exit(0);
S.top=S.base;
S.stacksize=STACKSIZE;
}

void PUSH(char e)//元素入栈
{
if (S.top-S.base==S.stacksize)
{
S.base=(char*)realloc(S.base,(S.stacksize+STACKSIZE_increase)*sizeof(char));//重新申请空间
if(!S.base)exit(0);
S.top=S.stacksize+S.base;
S.stacksize+=STACKSIZE_increase;
}
*S.top++=e;
}
char gettop()//获得栈顶元素
{
return *(S.top-1);
}
void popstack()//栈顶指针往下移动
{
S.top--;
}
void main()
{

char ch;
Initstack();
printf("please enter a string end of # \n");

do
{ ch=getchar();
switch(ch)
{
case '(':
case '[':PUSH(ch);break;//左括号全部入栈
case ')':if(gettop()=='(')
{
popstack();break;//当前括号匹配则调用函数,栈顶指针往下移动
}
else printf("the parenteis is not matching\n");exit(0);//当前不匹配则退出
case ']':if (gettop()=='[')
{
popstack();break;
}
else printf("the parenthesis is not matching1 \n");exit(0);

}
} while (ch!='#');
if (S.top==S.base&&ch=='#')//栈为空,而且最后为#
{printf("yes the parenthesis is matching3 !\n");
}
else printf("the parenthesis is not matching4\n");

}
百度网友9df37c8
2011-10-10 · TA获得超过215个赞
知道小有建树答主
回答量:309
采纳率:0%
帮助的人:223万
展开全部
用正则表达式,然后正则匹配,硬读到话效率高,但麻烦死,不通用。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
supermich
2011-10-11 · 超过13用户采纳过TA的回答
知道答主
回答量:83
采纳率:0%
帮助的人:33.1万
展开全部
看起来很乱
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-10-10
展开全部
看不懂............
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式