| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 999 人关注过本帖
标题:[求助]括号匹配问题的求助
只看楼主 加入收藏
heliujin
Rank: 2
等 级:论坛游民
帖 子:249
专家分:14
注 册:2006-3-14
结帖率:100%
收藏
 问题点数:0 回复次数:8 
[求助]括号匹配问题的求助

程序如下:
#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啊
肯定是哪个地方错了 我没找到 大家按照我的这个思路 帮我找找错误吧
谢谢大家的指教了


搜索更多相关主题的帖子: 括号 stack top char include 
2006-07-16 21:55
heliujin
Rank: 2
等 级:论坛游民
帖 子:249
专家分:14
注 册:2006-3-14
收藏
得分:0 
怎么没人解答啊
是不是问题太幼稚了啊
帮帮小弟吧
2006-07-17 10:56
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
收藏
得分:0 
没编译器。。

嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2006-07-17 11:18
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 
以下是引用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啊
肯定是哪个地方错了 我没找到 大家按照我的这个思路 帮我找找错误吧
谢谢大家的指教了




[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-07-17 16:26
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 

你有几个地方有点问题,最低级的错误在于,你的pick函数都没调用,n一直为0


[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-07-17 16:26
heliujin
Rank: 2
等 级:论坛游民
帖 子:249
专家分:14
注 册:2006-3-14
收藏
得分:0 

不好意思 我会注意的
我加了PICK函数后怎么还是运行不出想要的结果啊?
大家指点指点小弟吧 谢谢大家了

2006-07-17 19:38
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 
你没运行我在4楼写的程序吗?

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-07-17 19:39
heliujin
Rank: 2
等 级:论坛游民
帖 子:249
专家分:14
注 册:2006-3-14
收藏
得分:0 

哦 不好意思
我运行了 谢谢四楼的了

2006-07-17 23:21
wangsong
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2006-7-15
收藏
得分:0 

给你一个类似的例子
体现了原地踏步的思想的例子(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");
}


2006-07-19 21:44
快速回复:[求助]括号匹配问题的求助
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.043915 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved