新微赢技术网

标题: [求助]括号匹配问题的求助 [打印本页]

作者: lala    时间: 2009-11-3 03:50
标题: [求助]括号匹配问题的求助
程序如下:
#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啊
肯定是哪个地方错了 我没找到 大家按照我的这个思路 帮我找找错误吧
谢谢大家的指教了
作者: bgag    时间: 2009-11-3 03:50
怎么没人解答啊
是不是问题太幼稚了啊
帮帮小弟吧
作者: 阳光aiq浪子    时间: 2009-11-3 03:50
没编译器。。
作者: 夜来香    时间: 2009-11-3 03:50
以下是引用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啊
肯定是哪个地方错了 我没找到 大家按照我的这个思路 帮我找找错误吧
谢谢大家的指教了
作者: 龍2132    时间: 2009-11-3 03:50
你有几个地方有点问题,最低级的错误在于,你的pick函数都没调用,n一直为0
作者: 青苹果    时间: 2009-11-3 03:50
不好意思 我会注意的
我加了PICK函数后怎么还是运行不出想要的结果啊?
大家指点指点小弟吧 谢谢大家了
作者: ★海浪★    时间: 2009-11-3 03:50
你没运行我在4楼写的程序吗?
作者: 成熟之惑    时间: 2009-11-3 03:50
哦 不好意思
我运行了 谢谢四楼的了
作者: 草根    时间: 2009-11-3 03:50
给你一个类似的例子
体现了原地踏步的思想的例子(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");
}




欢迎光临 新微赢技术网 (http://bbs.weiying.cn/) Powered by Discuz! X3.2