4 括号匹配/*这题啊,说实话,真不容易,前前后后我问了其他同学好多次,才搞出这套代码,结果还出现段错误!!!经过反复调试才搞好*/
/*这题我问道的方法是,将左括号的内容先输入,在对比右括号内容,匹对则退位,具体内容可以看代码*/
分数 20
描述:
假设表达式中只包含三种括号:圆括号、方括号和花括号,它们可相互嵌套,如([{}])或({[][()]})等均为正确的格式,而{[]})}或{[()]或([]}均为不正确的格式.
输入一串括号
如果输入的右括号多余,输出:Extra right brackets
如果输入的左括号多余, 输出:Extra left brackets
如果输入的括号不匹配,输出:Brackets not match
如果输入的括号匹配,输出:Brackets match
输入格式:
一行只含 ( ) [ ] { } 这6种字符,不含其它任何字符的字符串。字符串不超过1000个字符。
输出格式:
如果输入的右括号多余,输出:
Extra right brackets
如果输入的左括号多余, 输出:
Extra left brackets
如果输入的括号不匹配,输出:
Brackets not match
如果输入的括号匹配,输出:
Brackets match
输入样例:
{{{{)))
输出样例:
Brackets not match
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
代码如下:
#define shuiyunsheng 6666666
#define _CRT_SECURE_NO_WARNINGS
#include <malloc.h>
#include <stdio.h>
#include<string.h>
int main()
{
char a[1001];
scanf("%s", a);
char satck[1000] = { 0 };
int n = strlen(a);
int i = 0, t = 0;
while (i<n)
{
if (a[i] == '(' || a[i] == '[' || a[i] == '{')
{
satck[t++] = a[i];
}
else
{
if (a[i] == ')')
{
if (t == 0)
{
printf("Extra right brackets");
return 0;
}
else if (satck[t - 1] == '(')
{
t--;
}
else
{
printf("Brackets not match\n");
return 0;
}
}
if (a[i] == ']')
{
if (t == 0)
{
printf("Extra right brackets");
return 0;
}
else if (satck[t - 1] == '[')
{
t--;
}
else
{
printf("Brackets not match\n");
return 0;
}
}
if (a[i] == '}')
{
if (t == 0)
{
printf("Extra right brackets");
return 0;
}
else if (satck[t - 1] == '{')
{
t--;
}
else
{
printf("Brackets not match\n");
return 0;
}
}
}
i++;
}
if (t <= 0)
printf("Brackets match\n");
else
{
printf("Extra left brackets\n");
}
}
/*其实还有其他方法,看后续,现在不想写了,好累!!!*/
/* 请在这里填写答案 */
/* 请在这里填写答案 */