通过键盘输入一个字符串,只包含 ‘(’ 和 ‘)’,请判断括号是否完全匹配。如果不能匹配,输出"No";如果能匹配,则输出"Yes",同时输出配对的括号的位置。例如:
输入:(())
输出:Yes
0 and 3
1 and 2
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <windows.h>
#define MAX 100
typedef char datatype;
typedef struct
{
datatype data[MAX];
int top;
}seqstack;
void main()
{
void test();
test();
}
seqstack * init_stack()
{
seqstack *s;
s = (seqstack*)malloc(sizeof(seqstack));
s->top = 0;
return s;
}
void PUSH(seqstack *s, datatype e)
{
if (s->top == MAX)
{
printf("Overflow!\n");
exit(0);
}
s->data[(s->top)++] = e;
}
void Pop(seqstack *s)
{
(s->top)--;
}
void test()
{
int i = 0;
int t, m;
char *p;
char str[MAX];
int location_left[50];
int fit[MAX];
seqstack *SS;
SS = init_stack();
t = 0;
m = 0;
printf("请输入字符串(请用英文括号)!\n");
gets(str);
for (p = str; *p != '\0'; p++)
{
if (*p == '(')
{
PUSH(SS, *p);
location_left[t] = i; //用于记录左括号
i++; //i用于记录字符个数
t++;
}
else if (*p == ')')
{
Pop(SS);
fit[m++] = location_left[--t];
fit[m++] = i;
i++;
}
else
{
i++;
}
}
if (SS->top == 0)
{
printf("YSE\n");
for (i = 0; i < m; i++)
{
printf("%d和",fit[i]);
printf("%d\n",fit[++i]);
}
}
else
{
printf("NO");
}
}