📄 chang.h
字号:
#include<stdio.h>
#include<string.h>
#define MaxSize 100
typedef char DataType;
#include"SeqStack.h"
int Chang(char str[],int n,char str1[])//开辟一个数组存放转变后的式子,这样方便计算结果时调用
{
int i,j=0;
char x;
SeqStack S;
StackInitiate(&S);
StackPush(&S,'#');
for(i=0;i<n;i++)
{
/*1*/ if(str[i]=='|')
{
StackTop(S,&x);
while(x!='#'&&x!='(')
{
StackPop(&S,&x);
printf("%c",x);
str1[j++]=x;
StackTop(S,&x);
}
StackPush(&S,str[i]);continue;
}
//-------------非号
if(str[i]=='!')
{
/*StackTop(S,&x);
while(x=='!')
{
StackPop(&S,&x);
printf("%c",x);
str1[j++]=x;
StackTop(S,&x);
}*/
StackPush(&S,str[i]);//当前符号入栈
continue;
}
/*3*/else if(str[i]=='(')//直接进栈,优先级最高
{
StackTop(S,&x);
StackPush(&S,str[i]);
continue;
}
/*4*/else if(str[i]=='&')
{
StackTop(S,&x);
while(x=='!'||x=='&')
{
StackPop(&S,&x);
printf("%c",x);
str1[j++]=x;
StackTop(S,&x);
}
StackPush(&S,str[i]);//当前符号入栈
continue;
}
/*5*/else if(str[i]==')')
{
//一直将当前栈顶元素出栈,直到遇到'('为止
StackTop(S,&x);
while(x!='#'&&x!='(')
{
StackPop(&S,&x);
printf("%c",x);str1[j++]=x;
StackTop(S,&x);
}
if(x=='(') StackPop(&S,&x);//若'('为将其出栈后,出栈结束而')'始终不用入栈
continue;
}
/*6*/else if(str[i]=='#')
{//将栈顶元素依次出栈,直遇到'#'出栈结束
StackTop(S,&x);
while(x!='#')
{
StackPop(&S,&x);
printf("%c",x);str1[j++]=x;
StackTop(S,&x);
}
if(x=='#') StackPop(&S,&x);//将栈内的最后一个元素出栈,表达式转换完毕
continue;
}
/*7*/else
{
printf("%c",str[i]);str1[j++]=str[i];
continue;
}
}
printf("\n");
return j;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -