7-2 括号匹配 (11 分)
给定一串字符,不超过100个字符,可能包括括号、数字、字母、标点符号、空格,编程检查这一串字符中的( ) ,[ ],{ }是否匹配。
输入格式:
输入在一行中给出一行字符串,不超过100个字符,可能包括括号、数字、字母、标点符号、空格。
输出格式:
如果括号配对,输出yes,否则输出no。
输入样例1:
sin(10+20)
输出样例1:
yes
输入样例2:
{[}]
输出样例2:
no
答案代码:
#include<stdio.h>
#include<string.h>
int left(char c)//判断是不是左括号
{
if(c=='('||c=='{'||c=='[')
{
return 1;
}
return 0;
}
int right(char c)//判断是不是右括号
{
if(c==')'||c=='}'||c==']')
{
return 1;
}
return 0;
}
int check(char left,char right)//判断左右括号是否匹配
{
if(left=='(')
{
return (right==')')?1:0;//如果相匹配返回1,否则返回0
}
else if(left=='{')
{
return (right=='}')?1:0;
}
else return (right==']')?1:0;
}
int main(){
int i=0;
char stack[200];//存左括号们的栈
int top=0;//栈顶
char s[200];//输入的字符串
gets(s);
int l=strlen(s);
for(i=0;i<l;i++)
{
if(left(s[i]))
{
stack[top++]=s[i];//左括号入栈
}
else if(right(s[i]))
{
if(check(stack[--top],s[i]))//左右括号开始匹配
{
continue; //如果匹配就继续循环
}
else
{
printf("no");//一旦出现不匹配的括号对就直接截停 输出no
return 0;
}
}
else continue;
}
if(!top)//如果栈空了,那么ok,没有单身狗
{
printf("yes");
return 0;
}
printf("no");//栈没空 输出no
return 0;
}