⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 符号匹配问题.cpp

📁 符号匹配问题编程
💻 CPP
字号:
// 符号匹配问题.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"


#define  MAX   100
//顺序栈

typedef struct {

	char   data[MAX];

	int top;
}seqstack;


void initStack(seqstack *s){   //初始化空栈

	s->top=0;
}

bool empty(seqstack *s){        //判空栈函数,若S为空栈,则函数值为“真”或为1,否则为“假”或为0

	if (s->top==0)

		return 1;

	else
		return 0;
}

void push(seqstack *s,char e){   //进栈操作,在S栈顶插入一个元素e,进栈操作又称插入、压栈

	if(s->top == MAX - 1)
   
		printf("OverFlow!\n");
   
	else{


	s->data[s->top]=e;

	s->top++;
	}
}

char pop(seqstack *s){    //出栈操作,在S栈顶删除一个元素,出栈操作又称删除、弹栈

	if(empty(s))

	{
		printf("UnderFlow!\n");

		return 0;

		exit(0);
	}
	else{

	s->top--;

	return s->data[s->top];
	}
}


char GetTop(seqstack *s){         //取栈顶元素操作  

	if(empty(s)){

		printf("Stack is empty.\n");
        
		return 0;

		exit(0);
	}
    else{
	
		int top;

	    top=s->top;

	    return s->data[--top];
	}
}

void clear(seqstack *s){    //栈置空操作

	int i=0;

	while(i<100){

		s->data[i]=' ';

		i++;
	}
}

char CurrentSize(seqstack *s){   //求当前栈中元素个数的函数


	return s->top;

}



void main(){

	FILE *fpin,*fpout;

	int count=1;

	seqstack *ss;

	ss=(seqstack *)malloc(sizeof(seqstack));

	initStack(ss);

	if ((fpin=fopen("in.txt","r"))==NULL){

		printf("Can't open the in.txt file!\n");

		exit(0);
	}

	if((fpout=fopen("out.txt","w"))==NULL){

		printf("Can't open the out.txt file!\n");

		exit(0);
	}
	char *p;
	p=(char *)malloc(100);

	while(!feof(fpin)){

	
		fscanf(fpin,"%s",p);

	
		fprintf(fpout,"第%d条表达式的匹配情况:\n",count);
		while(*p!='\0'){

		
			switch(*p){

		
			case '(':

			
				push(ss,*p);

		
			
				break;

		
			case '[':

			
				push(ss,*p);

			
				break;

		
			case '{':

			
				push(ss,*p);

			
				break;

		
			case ')':

			
				if(GetTop(ss)=='('){
			
				
					fprintf(fpout,"栈顶元素%c与所读元素%c匹配\n",pop(ss),*p);

				
					break;
			
				}
			
				else{
				
				
					fprintf(fpout,"符号不匹配!\n");

				
					exit(0);
			
				}
		
			case ']':

			
				if(GetTop(ss)=='['){
			
				
					fprintf(fpout,"栈顶元素%c与所读元素%c匹配\n",pop(ss),*p);

				
					break;
			
				}
			
				else{
				
				
					fprintf(fpout,"符号不匹配!\n");

				
					exit(0);
			
				}
		
			case '}':

			
				if(GetTop(ss)=='{'){
			
				
					fprintf(fpout,"栈顶元素%c与所读元素%c匹配\n",pop(ss),*p);

				
					break;
			
				}
			
				else{
				
				
					fprintf(fpout,"符号不匹配!\n");

				
					exit(0);
			
				}
		
			}

			p++;
			}

			if(empty(ss))
				
				fprintf(fpout,"符号匹配成功!\n");

			else fprintf(fpout,"符号匹配不成功!\n");

			count++;

	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -