回学校补作业哩,悲。
国庆假期爸妈是一点时间不留给我写作业啊
假设一个算术表达式中包含圆括号、方括号两种类型的括号,试编写一个判断表达式中括号是否匹配的程序,匹配返回Match succeed!,否则返回Match false!。
例
[1+2*(3+4*(5+6))]括号匹配
(1+2)*(1+2*[(1+2)+3)括号不匹配
输入
包含圆括号、方括号两种类型括号的算术表达式
输出
匹配输出Match succeed!
不匹配输出 Match false!
例
输入[1+2* (3+4*(5+6))]
输出Match succeed!
测试输入 | 期待的输出 | 时间限制 | 内存限制 | 额外进程 | |
---|---|---|---|---|---|
测试用例 1 | 以文本方式显示
| 以文本方式显示
| 1秒 | 64M | 0 |
测试用例 2 | 以文本方式显示
| 以文本方式显示
| 1秒 | 64M | 0 |
#include <stdio.h>
#include <string.h>
#define MAX_SIZE 100
int top = -1;
char stack[MAX_SIZE];
void push(char c)
{
if (top == MAX_SIZE - 1)
{
printf("Stack Overflow\n");
return;
}
stack[++top] = c;
}
char pop()
{
if (top == -1)
{
printf("Stack Underflow\n");
return '\0';
}
return stack[top--];
}
int Match(char *Formula)
{
for (int i = 0; i < strlen(Formula); i++)
{
if (Formula[i] == '(' || Formula[i] == '[')
push(Formula[i]);
else if (Formula[i] == ')')
{
if (top != -1 && stack[top] == '(')
pop();
else
return 0;
}
else if (Formula[i] == ']')
{
if (top != -1 && stack[top] == '[')
pop();
else
return 0;
}
}
return top == -1;
}
int main()
{
char Formula[MAX_SIZE];
fgets(Formula, MAX_SIZE, stdin);
if (Match(Formula))
printf("Match succeed!\n");
else
printf("Match false!\n");
return 0;
}