您的位置:首页 > 其它

检查一个算术表达式中的括号是否匹配

2016-05-10 15:05 489 查看
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 20

typedef struct{
char data[MAXSIZE];
int top;
}SeqStack;

SeqStack * initSeqStack(){
SeqStack * s = (SeqStack *)malloc(sizeof(SeqStack));
s->top = -1;
return s;
}

void pushSeqStack(SeqStack * s,char x){
if(s->top == MAXSIZE-1){
printf("the stack is full!\n");
}else{
s->top++;
s->data[s->top] = x;
}
}

char getSeqStack(SeqStack * s){
char x;
if(s->top == -1){
printf("the stack is empty!\n");
return '-1';
}else{
x = s->data[s->top];
return x;
}
}

void popSeqStack(SeqStack * s){
char x;
if(s->top == -1){
printf("the stack is empty!\n");
}else{
x = s->data[s->top];
s->top--;
}
}

void print(SeqStack * s){
for(int i=0;i<=s->top;i++){
printf("%3c",s->data[i]);
}
printf("\n");
}

void correct(char array[]){
SeqStack * s;
s = initSeqStack();
char x;
int i=0;
while(array[i] != '\0'){
if(array[i] == '(' || array[i] == '[' || array[i] == '{'){
pushSeqStack(s,array[i]);
i++;
}else if(array[i] == ')' || array[i] == ']' || array[i] == '}'){
x = getSeqStack(s);
if(array[i] == ')' && x == '('){
popSeqStack(s);
i++;
}else if(array[i] == ']' && x == '['){
popSeqStack(s);
i++;
}else if(array[i] == '}' && x == '{'){
popSeqStack(s);
i++;
}else{
break;
}
}else{
i++;
}
}

if(s->top != -1){
printf("error!\n");
}else{
printf("right!\n");
}
}

int main(){

char array[20];
printf("please input the string!\n");
gets(array);
correct(array);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: