# include <stdio.h>
# include <string.h>
# include <ctype.h>
# include <stdlib.h>
# include <map>
//使用map解决一对一 的关系
using namespace std;
map<char,long> mapdata; //数据存储
typedef struct node
{
long num;
char ch1[20];
char ch2[20];
}LINK;
LINK arry[101]; //存储已定义的变量
struct data
{
char st[100];
int top;
}p; int main()
{
long a,i=0,length,temp;
char str1[20],str2[20];
char ch;
long k,t;
char temp1[20]; //数据输入
while(scanf("%ld",&a) != EOF)
{ arry[i].num=a;
scanf("%s",&str1);
strcpy(arry[i].ch1,str1);
if(strcmp(str1,"STOP") != 0)
{
scanf("%s",&str2);
strcpy(arry[i].ch2,str2);
}
i++;
} //inital
length=i;
p.top=0; //对每一条语句顺序执行
for(i=0;i<=length;)
{
temp=0; //标记变量有没有定义 //LET语句
if(strcmp(arry[i].ch1,"LET") == 0)
{ ch=arry[i].ch2[0]; //取得变量
for(k=0;k<p.top;k++)
{
if(p.st[k]==ch)
{
temp=1; //变量已定义
if(isdigit(arry[i].ch2[2]) || arry[i].ch2[2]=='-')//如果第单个是数字,则说明是常量。
{
for(t=0;t<strlen(arry[i].ch2)-2;t++)
temp1[t]=arry[i].ch2[t+2];
temp1[t]='\0'; mapdata[arry[i].ch2[0]]=atoi(temp1);
}
else
{
if(arry[i].ch2[3] == '+')
{
mapdata[arry[i].ch2[0]]=mapdata[arry[i].ch2[2]]+mapdata[arry[i].ch2[4]];
}
if(arry[i].ch2[3] == '>')
{
if(mapdata[arry[i].ch2[2]] > mapdata[arry[i].ch2[4]])
mapdata[arry[i].ch2[0]]=1;
else
mapdata[arry[i].ch2[0]]=0;
}
break;
}
} } if(temp == 0) //变量未定义
{
if(isdigit(arry[i].ch2[2]) || arry[i].ch2[2]=='-')//如果第单个是数字,则说明是常量。
{
p.st[p.top++]=arry[i].ch2[0]; for(t=0;t<strlen(arry[i].ch2)-2;t++)
temp1[t]=arry[i].ch2[t+2];
temp1[t]='\0'; mapdata[arry[i].ch2[0]]=atoi(temp1); }
else
{
p.st[p.top++]=arry[i].ch2[0];
if(arry[i].ch2[3] == '+')
{
mapdata[arry[i].ch2[0]]=mapdata[arry[i].ch2[2]]+mapdata[arry[i].ch2[4]];
}
else if(arry[i].ch2[3] == '>')
{
if(mapdata[arry[i].ch2[2]] > mapdata[arry[i].ch2[4]])
mapdata[arry[i].ch2[0]]=1;
else
mapdata[arry[i].ch2[0]]=0;
} }
}
i++;
} //PRINT语句
if(strcmp(arry[i].ch1,"PRINT") == 0)
{
printf("%c=%d\n",arry[i].ch2[0],mapdata[arry[i].ch2[0]]);
i++;
} //IF语句
if(strcmp(arry[i].ch1,"IF") == 0)
{
if(mapdata[arry[i].ch2[0]] <= mapdata[arry[i].ch2[2]])
i++;
i++;
} //GOTO语句
if(strcmp(arry[i].ch1,"GOTO") == 0)
{
int b;
b=atol(arry[i].ch2);
i=b-1;
} //STOP语句
if(strcmp(arry[i].ch1,"STOP") == 0)
break;
} /*
//测试是否输入成功
for(i=0;i<=length;i++)
{
printf("%d %s %s\n",arry[i].num,arry[i].ch1,arry[i].ch2);
}
*/
return 0;
}
05-11 10:59