简单赋值语句

#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"); 
 }   

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值