第6週目プロジェクト5-接尾辞式
3727 ワード
問題とコード
実行結果
/*
*Copyright (c) 2015,
*All rights reserved.
* :test.cpp
* :
* :2015 10 12
* :v1.0
*
* : sqstack.h ,
。 , (56-20)/(4+2), ::56#20#-4#2#+/ #。
* :
* :
*/
#include <stdio.h>
#include <stdlib.h>
//#include "sqstack.h"
#define MaxOp 7
struct //
{
char ch; //
int pri; //
}
lpri[]= {{'=',0},{'(',1},{'*',5},{'/',5},{'+',3},{'-',3},{')',6}},
rpri[]= {{'=',0},{'(',6},{'*',4},{'/',4},{'+',2},{'-',2},{')',1}};
int leftpri(char op) // op
{
int i;
for (i=0; i<MaxOp; i++)
if (lpri[i].ch==op)
return lpri[i].pri;a
}
int rightpri(char op) // op
{
int i;
for (i=0; i<MaxOp; i++)
if (rpri[i].ch==op)
return rpri[i].pri;
}
bool InOp(char ch) // ch
{
if (ch=='(' || ch==')' || ch=='+' || ch=='-'
|| ch=='*' || ch=='/')
return true;
else
return false;
}
int Precede(char op1,char op2) //op1 op2
{
if (leftpri(op1)==rightpri(op2))
return 0;
else if (leftpri(op1)<rightpri(op2))
return -1;
else
return 1;
}
void trans(char *exp,char postexp[])
// exp postexp
{
SqStack *opstack; //
int i=0; //i postexp
ElemType ch;
InitStack(opstack); // ,
Push(opstack, '=');
while (*exp!='\0') //exp
{
if (!InOp(*exp)) //
{
while (*exp>='0' && *exp<='9') //
{
postexp[i++]=*exp;
exp++;
}
postexp[i++]='#'; // #
}
else //
{
GetTop(opstack, ch); //
switch(Precede(ch ,*exp))
{
case -1: // :
Push(opstack, *exp);
exp++; //
break;
case 0: //
Pop(opstack, ch); // (
exp++; //
break;
case 1: // postexp
postexp[i++]=ch;
Pop(opstack, ch);
break;
}
}
} //while (*exp!='\0')
Pop(opstack, ch);
while (ch!='=')
// exp , '='
{
postexp[i++]=ch;
Pop(opstack, ch);
}
postexp[i]='\0'; // postexp
DestroyStack(opstack);
}
int main()
{
char exp[]="(56-20)/(4+2)"; // exp
char postexp[200];
trans(exp,postexp);
printf(" :%s
",exp);
printf(" :%s
",postexp);
return 0;
}
実行結果