本关任务:栈的一种应用是检测代码中的括号是否正确匹配。例如: 代码形如{...(...)...[...]...} 为正确匹配。 代码形如{...[...]...}...} 错误,多了一个}。 代码形如{...[...}...]虽然数量正确,但次序错误。 编写程序,读入一个字符串,其中包含{}、[]、()三种括号,检查该字符串中的括号是否正确匹配。
相关知识
提示: 依次读入每个字符。(1)若遇到左括号,压栈。(2)若遇到右括号,检查栈顶的左括号:若与右括号匹配,则弹出栈顶左括号;若不匹配,说明匹配错误;若栈中无内容,说明匹配错误。(3)
编程要求
在右侧编辑器完成代码,输入一个字符串,检测其中的括号是否匹配,若是,输出“correct”,或否,输出“error”。
测试说明
平台会对你编写的代码进行测试:
输入描述: 输入一个字符串
输出描述: 输出“correct”或“error”
样例输入1: void fun(int a[]) {int* b = a; b[0] = 10;}
样例输出1: correct
样例输入2: void fun(int a[]) {int* b = a; b[0] = 10;
样例输出2: error
若遇到其他符号,忽略之。(4)若字符串已读完,此时栈中仍有内容,说明匹配错误。
#include <stdio.h>
#include<malloc.h>
typedef char ElementType;
typedef struct Stack {
ElementType* Data;
int Top;
int MaxSize;
}Stack;
Stack* create_stack(int MaxSize) {
Stack* stack;
stack=(Stack*)malloc(sizeof(Stack));
stack->Data =(char*)malloc(sizeof(ElementType) * MaxSize);
stack->Top = -1;
stack->MaxSize = MaxSize;
return stack;
}
int IsFull(Stack* stack) {
return stack->Top == stack->MaxSize - 1;
}
int IsEmpty(Stack* stack) {
return stack->Top == -1;
}
void Push(Stack* stack, ElementType data) {
if (stack->Top == stack->MaxSize - 1) {
printf("Stack Is Full\n");
return;
}
stack->Data[++stack->Top] = data;
}
ElementType Pop(Stack* stack) {
if (stack->Top == -1) {
printf("Stack Is Empty\n");
return 0;
}
return stack->Data[stack->Top--];
}
int f(char s[]) {
Stack* stack=create_stack(2000);
int i;
for (i = 0;s[i] != '\0';i++) {
if (s[i] == '('|| s[i] == '{'|| s[i] == '[')
Push(stack, s[i]);
else if (s[i] == ')') {
if (stack->Data[stack->Top]== '(')
Pop(stack);
else {
printf("error");
return 0;
}
}
else if (s[i] == '}')
{
if (stack->Data[stack->Top] == '{')
Pop(stack);
else {
printf("error");
return 0;
}
}
else if (s[i] == ']')
{
if (stack->Data[stack->Top] == '[')
Pop(stack);
else {
printf("error");
return 0;
}
}
}
if (stack->Top == -1)
printf("correct");
else printf("error");
return 1;
}
int main() {
char s[1000];
scanf("%[^\n]", s);
f(s);
}