数据结构实验之栈四:括号匹配
Time Limit: 1000MS Memory limit: 65536K
题目描述
给你一串字符,不超过50个字符,可能包括括号、数字、字母、标点符号、空格,你的任务是检查这一串字符中的( ) ,[ ],{ }是否匹配。
输入
输入数据有多组,处理到文件结束。
输出
如果匹配就输出“yes”,不匹配输出“no”
示例输入
sin(20+10){[}]
示例输出
yesno
提示
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <cstdlib>
using namespace std;
char aa[60], ss[60];
int main()
{
char k;
int n, i, l, top;
while(gets(aa) != NULL)
{
top = -1;
l = strlen(aa);
for( i = 0; i < l; i++)
{
if(aa[i] == '('||aa[i] == '['||aa[i] == '{')
ss[++top] = aa[i];
if(aa[i] == ')'||aa[i] == ']'||aa[i] == '}')
{
k = ss[top];
--top;
if(k == '('&&aa[i] == ')'||k == '{'&&aa[i] == '}'||k == '['&&aa[i] == ']')
continue;
else
break;
}
}
if(top == -1)
printf("yes\n");
else
printf("no\n");
}
return 0;
}
2:
#include<stdio.h>
#define maxsize 51
struct stack
{
char a[maxsize] ;
int top ;
}s ;
int match(char c1, char c2)
{
if((c1=='{'&&c2=='}')||(c1=='('&&c2==')')||(c1=='['&&c2==']'))
return 1 ;
else
return 0 ;
}
int m(char *str)
{
int i ;
char c ;
s.top = -1 ;
for(i=0; str[i]!=0; i++)
{
switch(str[i])
{
case'(':
case'[':
case'{': s.top++;
s.a[s.top] = str[i] ;
break ;
case')':
case']':
case'}': c = s.a[s.top] ;
if(match(c, str[i]))
s.top-- ;
else
return 0 ;
}
}
if(s.top==-1)
return 1;
else return 0 ;
}
int main()
{
int i ;
char str[51] ;
while(gets(str)!=NULL)
{
i = m(str) ;
if(i!=0)
printf("yes\n") ;
else printf("no\n") ;
}
return 0 ;
}

1677

被折叠的 条评论
为什么被折叠?



