设为首页收藏本站

新微赢技术网

 找回密码
 注册
搜索
热搜: 回贴
查看: 1336|回复: 8
打印 上一主题 下一主题

[求助]括号匹配问题的求助

[复制链接]
跳转到指定楼层
1#
发表于 2009-11-3 03:50:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
程序如下:
#include<iostream.h>
#include<string.h>
class stack
{
public:
stack(){}
stack(int sz):size(sz),n(0),k(0),top(0),bottom(0)
{
s=new char[100];
s[99]='\0';
m=new char[100];
}
void push(char c)
{
if(top-bottom>=size)
cout<<"full!"<<endl;
else
{
s[top]=c;
top=top+1;
}
}

char pop()
{
if(top<=bottom)
cout<<"empty!"<<endl;
else
{
return s[top-1];
top=top-1;
}
}
void pick()
{
for(int i=0;i<top;i++)
{
if(s[i]=='{'&&s[i]=='('&&s[i]=='['&&s[i]==']'&&s[i]==')'&&s[i]=='}')
{
m[n]=s[i];
n=n+1;
}
}
}
bool fb(char a,char b)
{
if((a=='('&&b==')')||(a=='['&&b==']')||(a=='{'&&b=='}'))
return true;
else
return false;
}
bool pipei()
{
if(n%2==0)
{
for(int j=0;j<n;j++)
{
if(fb(m[j],m[n-j-1]))
{
k=k+1;
}
}
if(k==n/2)
{
return true;
}
else
return false;
}
else
return false;
}
void disp()
{
for(int i=bottom;i<top;i++)
{
cout<<s[i];
}
cout<<endl;
}
private:
int bottom;
int top;
int n;
int k;
int size;
char *s;
char *m;
};
void main()
{
stack a(10);
a.push(')');
a.push('[');
a.push('(');
a.push(')');
a.push(']');
a.push('}');
a.disp();
if(a.pipei())
{
cout<<"right!"<<endl;
}
else
{
cout<<"wrong!"<<endl;
}
}
这样匹配应该显示wrong 为什么是right啊
肯定是哪个地方错了 我没找到 大家按照我的这个思路 帮我找找错误吧
谢谢大家的指教了
9#
发表于 2009-11-3 03:50:39 | 只看该作者
给你一个类似的例子
体现了原地踏步的思想的例子(C)
#include<stdio.h>
int main()
{
int n=0;
char c='0';
while( c = getchar() )
{
if( c == '\n' )
break;
else if( c == '{' )
n++;
else if( c == '}' )
n--;
else
;
}
if( 0 == n )
printf("OK\n");
else
printf("ERROR\n");
}
回复 支持 反对

使用道具 举报

8#
发表于 2009-11-3 03:50:38 | 只看该作者
哦 不好意思
我运行了 谢谢四楼的了
回复 支持 反对

使用道具 举报

7#
发表于 2009-11-3 03:50:37 | 只看该作者
你没运行我在4楼写的程序吗?
回复 支持 反对

使用道具 举报

6#
发表于 2009-11-3 03:50:35 | 只看该作者
不好意思 我会注意的
我加了PICK函数后怎么还是运行不出想要的结果啊?
大家指点指点小弟吧 谢谢大家了
回复 支持 反对

使用道具 举报

5#
发表于 2009-11-3 03:50:34 | 只看该作者
你有几个地方有点问题,最低级的错误在于,你的pick函数都没调用,n一直为0
回复 支持 反对

使用道具 举报

4#
发表于 2009-11-3 03:50:34 | 只看该作者
以下是引用heliujin在2006-7-16 21:55:06的发言:

程序如下:
#include<iostream.h>
#include<string.h>
class stack
{
public:
stack(){}
stack(int sz):n(0),k(0),top(0),bottom(0)
{
if(sz<=0||sz>100)size=100;
else size=sz;
s=new char[size];
s[size-1]='\0';
m=new char[size];
}
void push(char c)
{
if(top-bottom>=size)
cout<<"full!"<<endl;
else
{
s[top]=c;
top=top+1;
}
}

char pop()
{
if(top<=bottom)
cout<<"empty!"<<endl;
else
{
return s[top-1];
top=top-1;
}
}
void pick()
{
for(int i=0;i<top;i++)
{
if(s[i]=='{' || s[i]=='(' || s[i]=='[' || s[i]==']' || s[i]==')' || s[i]=='}')
{
m[n]=s[i];
n++;
}
}
}
bool fb(char a,char b)
{
return (a=='(' && b==')') || (a=='[' && b==']') || (a=='{' && b=='}');
}
bool pipei()
{
if(n%2==0)
{
for(int j=0;j<=n/2;j++)
if(fb(m[j],m[n-j-1]))k++;
if(k==n/2)return true;
}
return false;
}
void disp()
{
for(int i=bottom;i<top;i++)
{
cout<<s[i];
}
cout<<endl;
}
private:
int bottom;
int top;
int n;
int k;
int size;
char *s;
char *m;
};
void main()
{
stack a(10);
a.push(')');
a.push('[');
a.push('(');
a.push(')');
a.push(']');
a.push('}');
a.pick();
a.disp();
if(a.pipei())
{
cout<<"right!"<<endl;
}
else
{
cout<<"wrong!"<<endl;
}
}
这样匹配应该显示wrong 为什么是right啊
肯定是哪个地方错了 我没找到 大家按照我的这个思路 帮我找找错误吧
谢谢大家的指教了
回复 支持 反对

使用道具 举报

3#
发表于 2009-11-3 03:50:32 | 只看该作者
没编译器。。
回复 支持 反对

使用道具 举报

2#
发表于 2009-11-3 03:50:32 | 只看该作者
怎么没人解答啊
是不是问题太幼稚了啊
帮帮小弟吧
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

申请友链|小黑屋|最新主题|手机版|新微赢技术网 ( 苏ICP备08020429号 )  

GMT+8, 2024-11-18 18:36 , Processed in 0.118545 second(s), 9 queries , Gzip On, Memcache On.

Powered by xuexi

© 2001-2013 HaiAn.Com.Cn Inc. 寰耽

快速回复 返回顶部 返回列表