#include<stdio.h>
#include<stdlib.h>
#define MAX 100
void SET_Mul_Div(int i,int m); void SET_Add_Sub(int j,int m);
void print();
int m=0;
int count=0;
char tempvar='A';
char string[MAX]; //用于存放表达式
//用于更改计算后数组中的值
void change(int e)
{
int f=e+2;
char ch=string[f];
if(ch>='A'&&ch<='Z')
{
for(int l=0;l<m+10;l++)
{
if(string[l]==ch)
string[l]=tempvar;
}
}
if(string[e]>='A'&&string[e]<='Z')
{
for(int i=0;i<m;i++)
{
if(string[i]==string[e])
string[i]=tempvar;
}
}
}
void SET_Mul_Div(int i,int m) //处理乘除运算
{
for(i++;i<=m-1;i++)
{
if(string[i]=='*'||string[i]=='/')
{
printf("(%c %c %c %c)\n",string[i],string[i-1],string[i+1], tempvar);
change(i-1);
string[i-1]=string[i]=string[i+1]=tempvar;
count--;
tempvar=(char)(int)tempvar++;
}
}
}
void SET_Add_Sub(int j,int m) //处理加减运算
{
j++;
for(;j<=m-1;j++)
{
if(string[j]=='+'||string[j]=='-')
{
printf("(%c %c %c %c)\n",string[j],string[j-1],string[j+1],tempvar);
change(j-1);
string[j-1]=string[j]=string[j+1]=tempvar;
count--;
tempvar=(char)(int)tempvar++;
}
}
}
/*打印*/
void print()
{
int i,j,k;
for(i=0;i<=m-1;i++)//处理乘除运算
{
if(string[i]=='*'||string[i]=='/')
{
printf("(%c %c %c %c)\n",string[i],string[i-1],string[i+1],tempvar);
change(i-1);
string[i-1]=string[i]=string[i+1]=tempvar;
count--;
tempvar=(char)(int)tempvar++;
}
}
// int j;
for(j=0;j<=m-1;j++)//处理加减运算
{
if(string[j]=='+'||string[j]=='-')
{
printf("(%c %c %c %c)\n",string[j],string[j-1],string[j+1],tempvar);
change(j-1);
string[j-1]=string[j]=string[j+1]=tempvar;
count--;
tempvar=(char)(int)tempvar++;
}
}
//int k;
for(k=0;k<=m-1;k++) //处理赋值运算
{
if(string[k]=='=')
{
tempvar=(char)(int)--tempvar;
printf("(%c %c %c) \n",string[k],string[k+1], string[k-1],tempvar);
count--;
change(k+1);
string[k-1]=tempvar;
}
}
}
int main()
{
int p[MAX];
char ch;
int c=-1,q=0;
printf("请输入赋值语句:\n");
while((ch = getchar())!='\n')
{
string[m++]=ch;
if(ch=='='||ch=='+'||ch=='-'||ch=='*'||ch=='/')
count++;
else if(ch=='(')
{
p[++c]=m-1;
}
else if(ch==')')
{
q=m-1;
SET_Mul_Div(p[c],q); //从左括号处理到又括号
SET_Add_Sub(p[c],q);
tempvar=(char)(int)tempvar--;
string[p[c]]=string[m-1]=tempvar;
c--;
tempvar=(char)(int)tempvar++;
}
}
/********调用生成四元式的函数********/
print();
/*********判断是否成功**********/
if(count==0)
printf("Successful!\n");
else
printf("Wrong!");
printf("\n");
system("pause");
}
简单赋值语句
最新推荐文章于 2023-05-06 18:52:06 发布