📄 siyuanshi.txt
字号:
#include<string>
#include<iostream>
using namespace std;
const int N=20;
void si_yuan_shi(string expression)
{
string exp[N];
char t_num='0';
int i=0,j=0,k=0,num;
num=expression.size();
for( i=0;i<num;i++)
exp[i]=expression[i];
for(j=0;j<num;j++) //处理 ()
if(exp[j]=="(")
{
string temp_result="";
for(i=j+1;i<num;i++) //截取括号里面的表达式
{
if(exp[i]==")")break;
temp_result+=exp[i];
}
si_yuan_shi(temp_result);//把括号里的表达示作为新表达示
for(k=j;k<=i;k++) //利用递归求出四元表达式
exp[k]="";
exp[j]="t";
t_num++;
exp[j]+=t_num;
}
for(j=0;j<num;j++) //第二步 乘除
if(exp[j]=="*"||exp[j]=="/"||exp[j]=="%")
{
cout<<endl<<"处理一个 * / 后,四元式:"<<endl;
for(i=j-1;i>=0;i--)if(exp[i]!="")break;//向前寻找非空字符串
for(k=j+1;k<<num;k++)if(exp[k]!="")break;//向后寻找字符串
cout<<"("<<exp[j]<<","<<exp[i]<<","<<exp[k]<<",";
t_num++;
exp[i]="t"; // 换成 T
exp[i]+=t_num;
cout<<exp[i]<<")"<<endl;
exp[k]="";exp[j]="";
}
for(j=0;j<num;j++) //第三 加减
if(exp[j]=="-"||exp[j]=="+")
{
cout<<endl<<"处理 一个 + - 后,四元式:"<<endl;
for(i=j-1;i>=0;i--)if(exp[i]!="")break;
for(k=j+1;k<<num;k++)if(exp[k]!="")break;
cout<<"("<<exp[j]<<","<<exp[i]<<","<<exp[k]<<",";
t_num++;
exp[i]="t";
exp[i]+=t_num;
cout<<exp[i]<<")"<<endl;
exp[k]="";exp[j]="";
}
for(j=0;j<num;j++) //最后 等号
if(exp[j]=="=")
{
cout<<endl<<"处理 一个 = 后,四元式:"<<endl;
for(i=j-1;i>=0;i--)if(exp[i]!="")break;
for(k=j+1;k<<num;k++)if(exp[k]!="")break;
cout<<"("<<exp[j]<<","<<exp[k]<<","<<"-"<<",";
cout<<exp[i]<<")"<<endl;
exp[k]="";exp[j]="";
}
}
void main()
{
string expression,result="";
cout<<"请输入表达示:";
cin>>expression;
si_yuan_shi(expression);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -