📄 translation.cpp
字号:
#include<iostream.h>
#include<iomanip.h>
#include<string.h>
#include<math.h>
#include<ctype.h>
#define MAX 20
char temp[5]={'1','2','3','4','5'}; //用来作为四元式的临时变量
void move(char b,char *c,int x) //从x处向前移动,并插入b;
{ int s;
c[x-2]=b;
for(s=x+1;s<strlen(c);s++,x++)
c[x-1]=c[s];
}
void change(char a[20],char ch[])
{
int top=-1;//栈指针,初始值为-1
int i=0,n;
int j=0;
char sta[20];//符号栈
while(ch[i]!='#')
{
if(isalnum(ch[i]))//范围在A–Z, a–z, or 0–9
{
while(isalnum(ch[i]))
{a[j]=ch[i];
j++;
i++;
}//while
//a[j]=',';
//j++;
} //if
else//如果是符号,+,-,*,/,(,),(:=)以=表示
{
switch(ch[i])
{ case '=':
case '+':
case '-': if(sta[top]=='='||top==-1||sta[top]=='(')
{ top++;
sta[top]=ch[i++];
}//if
else
{a[j]=sta[top];
j++;
top--;
}//else
break;
case '*':
case '/':if(sta[top]=='*'||sta[top]=='/')
{a[j]=sta[top];//出栈
j++;
top--;
}//if
else
{
top++;
sta[top]=ch[i];//入栈
i++;
}//else
break ;
case '(': top++;
sta[top]=ch[i];
i++;break;
case ')': if(sta[top]=='(')
{ top--;
i++;
}//if
else
{a[j]=sta[top];
top--;
j++;
}//else
break;
default: cout<<" 你输入的有错误!"<<endl;
ch[i]='#';
j=0;
break;
}//switch
}//else
}//while
while(top!=-1)//把sta中剩余的符号赋到a中
{
a[j]=sta[top];j++;
top--;
}//while
a[j]='#';
cout<<"四元式为: "<<endl;
n=0;
j=0;
while(a[n]!='#')
{
if(!isalnum(a[n]))
{ if(a[n]=='=')
cout<<setiosflags(ios::left)<<'('<<a[n]<<','<<a[n-1]<<','
<<'-'<<','<<a[n-2]<<')'<<endl;
else {cout<<setiosflags(ios::left)<<'('<<a[n]<<','<<a[n-2]<<','
<<a[n-1]<<','<<temp[j]<<')'<<endl;
move(temp[j],a,n);
j++;
n=-1;}
}//if
n++;
}//while
}//change
void main()
{
static int i=0;
static int j=0;
char ch[MAX],s[MAX];
cout<<"请输入中缀表达式(以#作为结束符): ";
cin>>ch;
change(s,ch);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -