📄 lisp.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 + -