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

📄 lisp.cpp

📁 数据结构是编程的基础
💻 CPP
字号:
// lisp.cpp : Defines the entry point for the console application.
//////////////////////////////////////头文件//////////////////////////////////////
#define NULL 0
#include "stdafx.h"

//////////////////////////////////////头文件//////////////////////////////////////

//////////////////////////////////////将字符数组清零//////////////////////////////////////
void clearchar(char *clearvalue,int len)
{
	int i;
	for(i=0;i<len;i++)
	{
		clearvalue[i]=0;
	}
}
//////////////////////////////////////将字符数组清零//////////////////////////////////////

//////////////////////////////////////递归计算//////////////////////////////////////
int evaluate(char *charpoint)
{
	int length=strlen(charpoint),bracketcount=0;
	int i=0,j=0,k=0;
	int first,last;
	char *tempchar=(char *)malloc(length);
	clearchar(tempchar,length);
	if(1==strlen(charpoint))
	{
		free(tempchar);
		return *charpoint-48;
	}
	else
	{
		for(i=2;i<length;i++)
		{
			tempchar[j++]=charpoint[i];
			///////////////////////根据括号个数分解lisp表达式
			switch(charpoint[i])
			{
			case '(' :bracketcount++;break;
			case ')' :bracketcount--;break;
			}
			if(!bracketcount) 
			{
				tempchar[j]=0;
				break;
			}
		}
		first=evaluate(tempchar);
		clearchar(tempchar,length);
		for(j=i+1;j<length-1;j++)
			tempchar[k++]=charpoint[j];
		tempchar[k]=0;
		last=evaluate(tempchar);
		free(tempchar);
		return first+last;
	}
}
//////////////////////////////////////递归计算//////////////////////////////////////

int main(int argc, char* argv[])
{
	char infilename[30]="input.txt";
    char outfilename[30]="output.txt";
	char filename[30];
	char acceptstring[500];
    FILE *infile,*outfile;
////////////////////////打开文件(读)
	printf("请输入待测程序名(文件不存在则为input.txt):");
	scanf("%s",filename);
	if((infile=fopen(filename,"r"))==NULL) 
	{
		infile=fopen(infilename,"r");
	}
	else
	{
		strcpy(infilename,filename);
	}
	////////////////////////打开文件(写)
	printf("请指定结果输出的文件名(文件创建或打开失败则为output.txt):");
	scanf("%s",filename);
	if((outfile=fopen(filename,"w"))==NULL) 
	{
		outfile=fopen(outfilename,"w");
	}
	else
	{
		strcpy(outfilename,filename);
	}
	while(!feof(infile))
	{
		clearchar(acceptstring,strlen(acceptstring));
		////////////////////////读文件
		fscanf(infile,"%s",acceptstring);
		if(0==*acceptstring)break;
		////////////////////////写文件
		fprintf(outfile," %s = %d\n",acceptstring,evaluate(acceptstring));		
	}
	fclose(infile);
	fclose(outfile);
	return 0;
}

⌨️ 快捷键说明

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