| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1483 人关注过本帖
标题:[求助]求匹配
只看楼主 加入收藏
gaga
Rank: 1
等 级:新手上路
威 望:2
帖 子:307
专家分:0
注 册:2006-4-5
收藏
得分:0 

我也写了一个把所有的括号都考虑一下
#include"stdio.h"
#include"stdlib.h"
#include"string.h"

#define INIT_SIZE 100
#define INCREMENT 10
#define error 0


typedef struct
{
char *top;
char *base;
int stacksize;
}SqStack;

void InitStack(SqStack &S);
void PushStack(SqStack &S, char e);
int PopStack(SqStack &S, char &e);
int Find( char ch,SqStack S);

void InitStack(SqStack &S)
{
S.base=(char*)malloc(sizeof(char)*INIT_SIZE);
if(!S.base) exit(1);
S.top=S.base;
S.stacksize=INIT_SIZE;

}

void PushStack(SqStack &S, char e)
{
if(S.top-S.stacksize==0)
{
S.base=(char*)realloc(S.base, sizeof(char)*(INIT_SIZE+INCREMENT));
S.top=S.base+INCREMENT;
S.stacksize+=INCREMENT;
}

*S.top++=e;
}

int PopStack(SqStack &S, char &e)
{
if(S.base==S.top) return error;
e=*(--S.top);
return 1;
}

int Find( char ch,SqStack S)/*看是不是相匹配*/
{
if(S.base==S.top) return 1;
else
if(ch==')'&& *(S.top-1)=='('||ch==']'&&*(S.top-1)=='['||ch=='}'&&*(S.top-1)=='{')
return 0;
else return 1;
}

int main()
{
char ch,e;
int m;
SqStack S;
InitStack(S);
ch=getchar();
while(ch!=' ')
{

if(m=Find(ch,S))
{
PushStack(S,ch);
ch=getchar();
}
else
{
PopStack(S, e);
ch=getchar();
}
}

if(S.base==S.top)
printf("是匹配的.\n");
else
printf("\aNOt!");


return 0;
}


明天的明天还有明天。 可是今天却只有一个。 public Copy from 无缘今生
2006-05-24 15:35
菜鸟上路
Rank: 4
等 级:贵宾
威 望:14
帖 子:1120
专家分:0
注 册:2006-3-21
收藏
得分:0 

楼上的怎么运行啊,怎么输入“ ”后出现“是匹配的.”


2006-05-24 17:22
菜鸟上路
Rank: 4
等 级:贵宾
威 望:14
帖 子:1120
专家分:0
注 册:2006-3-21
收藏
得分:0 
if(m=Find(ch,S))应改为if(Find(ch,S))吧,你这程序好象只是验证括号是否匹配吧



2006-05-24 17:38
gaga
Rank: 1
等 级:新手上路
威 望:2
帖 子:307
专家分:0
注 册:2006-4-5
收藏
得分:0 

说的对,就是专验证括号匹配的呵呵
我在运行的时候是没有错误的


明天的明天还有明天。 可是今天却只有一个。 public Copy from 无缘今生
2006-05-24 21:35
SunShining
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:31
帖 子:2215
专家分:0
注 册:2006-2-17
收藏
得分:0 
以下是引用starrysky在2006-5-23 23:23:00的发言:

有啊,一共有3种,先序线索数,中序线索数和后序线索数,只是书上一般拿中序线索数和后序线索数来做例子.

我想到个先序算法..在吗?来的时候给我发消息..我们研究研究!


[glow=255,violet,2]闭关修炼ing...[/glow] [FLASH=360,180]http://www./chinaren.swf[/FLASH]
2006-05-24 21:41
菜鸟上路
Rank: 4
等 级:贵宾
威 望:14
帖 子:1120
专家分:0
注 册:2006-3-21
收藏
得分:0 
那应该怎么输入呢?

2006-05-24 21:54
gaga
Rank: 1
等 级:新手上路
威 望:2
帖 子:307
专家分:0
注 册:2006-4-5
收藏
得分:0 
你直接输入括号(最后要加个空格,再加回车就行了)不就可以了吗,
又不是表达式求值

明天的明天还有明天。 可是今天却只有一个。 public Copy from 无缘今生
2006-05-25 13:31
菜鸟上路
Rank: 4
等 级:贵宾
威 望:14
帖 子:1120
专家分:0
注 册:2006-3-21
收藏
得分:0 

恩,


2006-05-25 13:55
hexquan
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2006-5-25
收藏
得分:0 
有那么复杂吗?这是我编的一个:
main()
{char a,c[10];
int j=1;
while((a=getchar())!='\n')
{if(a=='('||a=='[')
{c[j]=a;j++;}
if((a==')'&&c[j]=='(')||(a==']'&&c[j]=='['))
j--;
else break;
}
if(j==0) printf("pipei");
else printf("bupipei");
}

2006-05-26 18:14
菜鸟上路
Rank: 4
等 级:贵宾
威 望:14
帖 子:1120
专家分:0
注 册:2006-3-21
收藏
得分:0 
楼上的能得到正确的运行结果吗?

2006-05-26 20:04
快速回复:[求助]求匹配
数据加载中...
 
   



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

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