關於括號匹配的問題及其源碼
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
int main()
{
char **p,c;
int i,j,k,sum,n,l;
char *q;
char a[100]={0};
while(scanf("%d",&n)!=EOF){
p=(char**)malloc(n*sizeof(char*));
for(i=0;i<n;i++)
{
*(p+i)=(char*)malloc(100*sizeof(char));
scanf("%s",*(p+i));
}
for(i=0;i<n;i++)
{
l=0;
int flag=1;
l=strlen(*(p+i)) ;
memset(a,0,100);
q=&a[0];
for(j=0;j<l;j++)
{
switch(*(*(p+i)+j))
{
case '(':
*q=*(*(p+i)+j);
q=q+1;
break;
case '[':
*q=*(*(p+i)+j);
q=q+1;
break;
case '{':
*q=*(*(p+i)+j);
q=q+1;
break;
case ')':
if(q!=a&&*(q-1)=='('){
q--;
}
else
{
flag=0;
}
break;
case '}':
if(q!=a&&*(q-1)=='{'){
q--;
}
else
{
flag=0;
}
break;
case ']':
if(*(q-1)=='['&& q!=a ){
q--;
}
else
{
flag=0;
}
break;
}
}
if(q==a&&flag==1)
{printf("Yes\n");
}
else
{printf("No\n");
}
}
free(p); }
return 0;
}
#include<stdlib.h>
#include<math.h>
#include<string.h>
int main()
{
char **p,c;
int i,j,k,sum,n,l;
char *q;
char a[100]={0};
while(scanf("%d",&n)!=EOF){
p=(char**)malloc(n*sizeof(char*));
for(i=0;i<n;i++)
{
*(p+i)=(char*)malloc(100*sizeof(char));
scanf("%s",*(p+i));
}
for(i=0;i<n;i++)
{
l=0;
int flag=1;
l=strlen(*(p+i)) ;
memset(a,0,100);
q=&a[0];
for(j=0;j<l;j++)
{
switch(*(*(p+i)+j))
{
case '(':
*q=*(*(p+i)+j);
q=q+1;
break;
case '[':
*q=*(*(p+i)+j);
q=q+1;
break;
case '{':
*q=*(*(p+i)+j);
q=q+1;
break;
case ')':
if(q!=a&&*(q-1)=='('){
q--;
}
else
{
flag=0;
}
break;
case '}':
if(q!=a&&*(q-1)=='{'){
q--;
}
else
{
flag=0;
}
break;
case ']':
if(*(q-1)=='['&& q!=a ){
q--;
}
else
{
flag=0;
}
break;
}
}
if(q==a&&flag==1)
{printf("Yes\n");
}
else
{printf("No\n");
}
}
free(p); }
return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.