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;
}
} 展开
// 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;
}
} 展开
展开全部
#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");
}
#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");
}
展开全部
用正则表达式,然后正则匹配,硬读到话效率高,但麻烦死,不通用。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
看起来很乱
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2011-10-10
展开全部
看不懂............
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询