前缀式转中缀式Convert prefix to postfix expression

/*	Convert prefix to postfix expression.


*/
#include <fstream.h>
#include <string.h>

//	Prototype Declarations
void preToPostFix  (char *preFixIn, char *exprOut);
int  findExprLen   (char *exprIn);

int main (void)
{
//	Local Definitions
	char  preFixExpr[256]  = "-+*ABC/EF";
	char  postFixExpr[256] = "";
	
//	Statements
	cout << "Begin prefix to postfix conversion\n\n";
	
	preToPostFix (preFixExpr, postFixExpr);
	cout << "Prefix expr:  " << preFixExpr  << endl;
	cout << "Postfix expr: " << postFixExpr << endl;
	
	cout << "\nEnd prefix to postfix conversion\n";
	return 0;
}	// main
	
/*	==================== preToPostFix ====================
	Convert prefix expression to postfix format.
	   Pre   preFixIn is string containing prefix expression
	            expression can contain no errors/spaces
	         postFix is string variable to receive postfix
	   Post  expression has been converted
*/
void preToPostFix (char *preFixIn,
                   char *postFix)
{
//	Local Definitions
	char  operatr [2];
	char  postFix1[256];
	char  postFix2[256];
	char  temp    [256];
	int   lenPreFix;
	
//	Statements
	if (strlen(preFixIn) == 1)
	   {
	    *postFix       = *preFixIn;
	    *(postFix + 1) = '\0';
	    return;
	   } // if only operand
	   
	*operatr       = *preFixIn;
	*(operatr + 1) = '\0';
	
	// Find first expression
	lenPreFix = findExprLen (preFixIn + 1);
	strncpy (temp, preFixIn + 1, lenPreFix);
	*(temp + lenPreFix) = '\0';
	preToPostFix (temp, postFix1);
	
	// Find second expression
	strcpy (temp, preFixIn + 1 + lenPreFix);
	preToPostFix (temp, postFix2);
	
	// Concatenate to postFix
	strcpy (postFix, postFix1);
	strcat (postFix, postFix2);
	strcat (postFix, operatr);
	
	return;
}	// preToPostFix

/*	==================== findExprLen ====================
	Determine size of first prefix substring in an expression.
	   Pre   exprIn contains prefix expression
	   Post  size of expression is returned
*/
int findExprLen (char *exprIn)
{
//	Local Definitions
	int  lenExpr1;
	int  lenExpr2;

//	Statements
	switch (*exprIn)
	   {
	    case '*':
	    case '/':
	    case '+':
	    case '-': 
	         // Find length of first prefix expression
	         lenExpr1  =  findExprLen (exprIn + 1);

	         // Find length of second prefix expression
	         lenExpr2  =  findExprLen (exprIn + 1 + lenExpr1);
	         break;
	    default: 
	         // base case--first char is operand
	         lenExpr1 = lenExpr2 = 0;
	         break;
	   } // switch
	return lenExpr1 + lenExpr2 + 1;
}	// findExprLen

/*	Results:
	Begin prefix to postfix conversion

	Prefix expr:  -+*ABC/EF
	Postfix expr: AB*C+EF/-

	End prefix to postfix conversion
*/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值