实时读取键盘输入,当输入的括号不匹配时输出error
本例程用数组栈实现,对于每次输入的开括号进行压栈,对闭括号则检测栈顶括号是否匹配。
匹配,则出栈;不匹配,则返回error
stack.h
#pragma once
#ifndef _STACK_H
#define MAX 1000
typedef int ElementType;
struct MyStack {
ElementType *arr;
int count;
int top;
};
typedef struct MyStack *stack;
void push(ElementType e, stack s);
void pop(stack s);
int isEmpty(stack s);
int isFull(stack s);
void makeEmpty(stack s);
stack creatStack(int maxEle);
void distroyStack(stack s);
ElementType top(stack s);
#endif
// stack.cpp: 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "stack.h"
#include <conio.h>
int arr[100];
MyStack ss;
stack gs;
void push(ElementType e, stack s)
{
if (!isFull(s)) {
s->arr[++(s->top)] = e;
}
}
void pop(stack s)
{
if (!isEmpty(s))
s->top--;
}
int isEmpty(stack s)
{
if(!s->top)
return 1;
return 0;
}
int isFull(stack s)
{
if (s->top == s->count)
return 1;
return 0;
}
void makeEmpty(stack s)
{
int i = 0;
for (i = 0; i < s->count; i++) {
s->arr[i] = 0;
}
s->top = 0;
}
stack creatStack(int maxEle)
{
ss.arr = arr;
ss.top = 0;
ss.count = maxEle;
makeEmpty(&ss);
return &ss;
}
void distroyStack(stack s)
{
}
ElementType top(stack s)
{
if (!isEmpty(s)) {
return s->arr[s->top];
}
return 0;
}
int main() {
char c,c2;
MyStack s;
s.arr = arr;
s.top = 0;
s.count = 10;
while ((c = _getch()) != 'q') {
printf("%c", c);
if (c == '(' || c == '[' || c == '{') {
push(c, &s);
int c1 = top(&s);
}
if (c == ')' || c == ']' || c == '}') {
c2 = top(&s);
if ((c == ')' && c2 != '(') || (c == ']' && c2 != '[')
|| (c == '}' && c2 != '{'))
printf("error\n");
else {
pop(&s);
}
}
}
return 0;
}