?? 12.cpp
字號:
# define N 20
# include <stdio.h>
# include <string.h>
int a,b;
main()
{ int szt[N];
char str[N];
int *top;
char ch;
int act[12][9]={
{5,-1,-1,4,-1,-1,1,2,3},
{-1,6,-1,-1,-1,0,-1,-1,-1},
{-1,22,7,-1,22,22,-1,-1,-1},
{-1,24,24,-1,24,24,-1,-1,-1},
{5,-1,-1,4,-1,-1,8,2,3},
{-1,26,26,-1,26,26,-1,-1,-1},
{5,-1,-1,4,-1,-1,-1,9,3},
{5,-1,-1,4,-1,-1,-1,-1,10},
{-1,6,-1,-1,11,-1,-1,-1,-1},
{-1,21,7,-1,21,21,-1,-1,-1},
{-1,23,23,-1,23,23,-1,-1,-1},
{-1,25,25,-1,25,25,-1,-1,-1}};
int s=1,i,j,n=0;
clrscr();
str[n]='#';
printf("Please input a string:\n");
do
{ n=n+1;
str[n]=getchar();
}while(str[n]!='#');
ch=str[1];
szt[0]=0;
i=0;
j=1;
top=&szt[0];
a=change(ch);
b=0;
s=act[b][a];
while(s!=0)
{
printf("%-5d%c\n",szt[i],ch);
s=act[b][a];
switch(s)
{
case 0:break;
case 4:i=i+1;
szt[i]=4;
j=j+1;
ch=str[j];
a=change(ch);
++top;
b=4;
break;
case 5:i=i+1;
szt[i]=5;
j=j+1;
ch=str[j];
a=change(ch);
++top;
b=5;
break;
case 6:i=i+1;
szt[i]=6;
j=j+1;
ch=str[j];
a=change(ch);
++top;
b=6;
break;
case 7:i=i+1;
szt[i]=7;
j=j+1;
ch=str[j];
a=change(ch);
++top;
b=7;
break;
case 11:i=i+1;
szt[i]=11;
j=j+1;
ch=str[j];
a=change(ch);
++top;
b=11;
break;
case 21:ch='E';
i=i-3;
b=szt[i];
a=change(ch);
i=i+1;
szt[i]=act[b][a];
top=top-2;
*top=act[b][a];
b=*top;
ch=str[j];
a=change(ch);
break;
case 22:ch='E';
b=szt[i-1];
a=change(ch);
*top=act[b][a];
b=*top;
ch=str[j];
a=change(ch);
break;
case 23:ch='T';
i=i-3;
b=szt[i];
a=change(ch);
i=i+1;
szt[i]=act[b][a];
top=top-2;
*top=act[b][a];
b=*top;
ch=str[j];
a=change(ch);
break;
case 24:ch='T';
b=szt[i-1];
a=change(ch);
*top=act[b][a];
b=*top;
ch=str[j];
a=change(ch);
break;
case 25:ch='F';
i=i-3;
b=szt[i];
a=change(ch);
i=i+1;
szt[i]=act[b][a];
top=top-2;
*top=act[b][a];
b=*top;
ch=str[j];
a=change(ch);
break;
case 26:ch='F';
b=szt[i-1];
a=change(ch);
*top=act[b][a];
b=*top;
ch=str[j];
a=change(ch);
break;
default:printf("error!\n");
}
}
if(ch=='#')
printf("Success!");
else printf("fail!");
getch();
}
int change(char x)
{ int m;
if(x=='i') m=0;
else if(x=='+') m=1;
else if(x=='*') m=2;
else if(x=='(') m=3;
else if(x==')') m=4;
else if(x=='#') m=5;
else if(x=='E') m=6;
else if(x=='T') m=7;
else if(x=='F') m=8;
else printf("error!\n");
return(m);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -