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

📄 youxian.cpp

📁 --- --- 算符优先
💻 CPP
字号:
#include<stdio.h>
#include<string.h>
char vt[7]={'+','*','|','i','(',')','#'}; 
int eeee[7][7]={{1,3,3,3,3,1,1},{1,1,3,3,3,1,1},{1,1,3,3,3,1,1},{1,1,1,0,0,1,1},{3,3,3,3,3,2,0},{1,1,1,0,0,1,1},{3,3,3,3,3,0,2}}; 
char vn[4]={'E','T','F','P'}; 
char s[50],ss[50]; 
char *tt,*bb;//tt-->top bb-->bottom 
char *wenfa[8]={"EE+T","ET","TT*F","TF","FP|F","PP","P(E)","Pi"}; 
int k; 

judge_vn(char cc) 
{ 
int i=0; 
for(i=0;i<4;i++) 
{ 
if(cc==vn[i]) 

return(i+1); 
} 
return(0); 
} 

judge_vt(char cc) 
{ 
int i=0; 
for(i=0;i<7;i++) 
if(cc==vt[i]) 
return(i+1); 
return(0); 
} 


judge() 
{ 
int z; 
z=judge_vn(s[k]); 
if(s[1]=='#' && k==2 && z ) 
return(1); 
else 
return(0); 
} 

char judge_guiyue(int a,int b) 
{ 
int aa=0,bb=0,cc=0,ii=1,jj=a+1; 
while(aa==0) 
{ 
if(s[a+1]==wenfa[bb][ii]) 
{ 
while(cc==0 && jj!=b) 
{ 
jj++; 
ii++; 
if(s[jj]!=wenfa[bb][ii]) 
cc=1; 



} 
if(cc==0 && jj==b) 
aa=1; 
} 
else 
{ 
cc=0; 
ii=1; 
jj=a+1; 
bb++; 

} 

} 

return(wenfa[bb][0]); 
} 



main() 
{ 
int j,pan,tttt,tttta,wwww=0,ddr; 
char a,Q; 


tt=bb=&s[1]; 
printf("input the string needed analysed\n:"); 
scanf("%s",ss); 


//printf("\n%s\n",ss); 


k=1; 
s[k]='#'; 
a=ss[wwww]; 
pan=judge(); 


//printf("\n%d\n",pan); 

while(!pan) 
{ 

tttt=judge_vt(s[k]); //printf("\n%d\n",tttt); 
tttta=judge_vt(a); //printf("\n%d\n",tttta); 
if(tttt) 
j=k; 
else 
j=k-1; 
tttt=judge_vt(s[j]); //printf("\n%d\n",tttt); 
// printf("\n%d\n",eeee[tttt-1][tttta-1]); 
if(eeee[tttt-1][tttta-1]==1) 
{ 
Q=s[j]; //printf("\n%c\n",Q); 
//printf("\n%d\n",eeee[judge_vt(s[j])-1][judge_vt(Q)-1]); 
while (eeee[judge_vt(s[j])-1][judge_vt(Q)-1]!=3) 
{ 
Q=s[j]; 
if(judge_vt(s[j-1])) 
j=j-1; 
else 
j=j-2; 

} 
k=j+1; 
s[k]=judge_guiyue(j,k); 
//pan=judge(); 


} 
else 
if(eeee[tttt-1][tttta-1]==3) 
{ 
k=k+1; 
s[k]=a; 
a=ss[++wwww]; 
//pan=judge(); 
} 
else 
if(eeee[tttt-1][tttta-1]==2) 
{ 
if(s[j]=='#') 
{ 
pan=judge(); 
if(pan) 
printf("\n正常结束\n"); 
else 
{ 
pan=1; 
printf("\n出错\n"); 
} 


} 
else 
{ 
k=k+1; 
s[k]=a; 
a=ss[++wwww]; 
//pan=judge(); 

} 

} 

else 
{ 
pan=1; 
printf("\n出错\n"); 
} 
for(ddr=1;ddr<=k;ddr++) 
printf("\n%c\n",s[ddr]); 
printf("%d",k); 
printf("%d",pan); 
printf("%c",a); 

} 



//printf("%s",wenfa[0]); 

return 0;
}

⌨️ 快捷键说明

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