(Ñγǹ¤Ñ§ÔºÊý¾Ý½á¹¹¿Î³ÌÉè¼Æ)Õ»µÄÓ¦Óñí´ïʽÇóÖµ

/*******

Whereat ˵Ã÷:

Whereat ¼Ç¼Á˲Ù×÷ÊýºÍÔËËã·ûºÅµÄλÖã¬ÓÃAºÍBÇø·Ö¡£A = operand, B = operator. (ÀýÈç 1+2ת»»³É12+,ÔÚwhereatÖеÄÐÎʽӦ¸ÃÊÇ AAB) OpHolder˵Ã÷:

CharÀàÐ͵ĶÑÕ»OpholderÓÃÀ´±£´æÔËËã·ûºÅ¡£ ******/

/******½«ÖÐ׺±í´øÊ½×ª»»Îªºó׺±í´ïʽ******/

void ConvertToPost(FILE *In, Stack Whereat, FILE *Temp) {

Stack OpHolder; char holder; char lastseen;

int digitcounter = 0; /*²Ù×÷ÊýµÄ¼ÆÊýÆ÷*/ OpHolder = malloc(sizeof(struct Node)); /*³õʼ»¯*/ OpHolder->Next = NULL; holder=getc(In);

lastseen = '@'; /*ÓÃÀ´·ÀÖ¹ÊäÈë¸ñʽ´íÎó£¬ÀýÈçÁ½¸öСÊýµã*/ putc(' ',Temp);

while ((holder !='\\n') && (holder != EOF)){ if (holder == ' '){ digitcounter = 0; } else if ( IsOperator(holder) == -1){ /*Èç¹ûholder²»ÊDzÙ×÷Êý»òÔËËã·ûºÅ*/ PrintError = 1; }

else if (IsOperator(holder)==0){ if ((lastseen == holder) && (lastseen == '.')){ /*´íÎó´¦Àí*/ PrintError = 1; } else lastseen = holder; if (digitcounter == 0){ Push('A',Whereat); /*½øÕ»*/ digitcounter++; /*¼ÆÊýÆ÷¼ÓÒ»*/ putc(' ',Temp);

} putc(holder,Temp); } else{ digitcounter = 0; if ((lastseen == holder) && (lastseen != '(') && (lastseen != ')')) /*\Çé¿öÌØÊâ¶Ô´ý*/ PrintError = 1; else lastseen = holder; 6))

if(IsEmpty(OpHolder)==1){ /*µ±OpHolderΪ¿Õ*/ Push(holder,OpHolder); }

else if(OperatorValue(Top(OpHolder)) == 6){ /*OpHolderÊÇ\µÄÇé¿ö*/ if(OperatorValue(holder)==5) Pop(OpHolder); else Push(holder,OpHolder); }

else if(OperatorValue(holder) == 6){ Push(holder,OpHolder); }

else if(OperatorValue(holder) == 5){ /* OpHolderÊÇ\µÄÇé¿ö*/ while ((IsEmpty(OpHolder) != 1) && (OperatorValue(Top(OpHolder)) != {

putc(' ',Temp);

Push('B',Whereat);

putc(Top(OpHolder),Temp); Pop(OpHolder); } if (IsEmpty(OpHolder) == 1){ /*´íÎó´¦Àí,À¨ºÅ²»Æ¥Åä*/ PrintError = 1; } else Pop(OpHolder); }

else if((OperatorValue(holder) == OperatorValue(Top(OpHolder)))

&& (OperatorValue(holder) == 3)){ /*ÃÝÔËËãÇé¿ö*/ Push(holder,OpHolder); }

else if((OperatorValue(holder) < OperatorValue(Top(OpHolder))) && OperatorValue(Top(OpHolder)) == 3){ /*ÃÝÔËËãÇé¿ö*/ putc(' ',Temp); Push('B',Whereat); putc(Top(OpHolder),Temp); Pop(OpHolder); while((IsEmpty(OpHolder) != 1) && (OperatorValue(Top(OpHolder)) }

{ Push('B',Whereat); putc(' ',Temp); putc(Top(OpHolder),Temp); Pop(OpHolder); }

Push(holder,OpHolder);

== 3))

/******

Èç¹ûµ±Ç°ÔËËã·ûºÅµÄÓÅÏȼ¶Ð¡ÓÚ»òÕßµÈÓÚ¶ÑÕ»ÖеÄÔËËã·ûºÅµÄÓÅÏȼ¶,Ôò½«Æä·ÅÈëtempÖУ¬²¢ÇÒ½«¶ÑÕ»ÖеÄÔËËã·ûºÅ³öÕ»£¬·ÅÈëtempÖУ¬Ö±µ½¶ÑջΪ¿Õ»òÕßÓÅÏȼ¶Ð¡ÓÚ¶ÑÕ»¶¥ÔªËصÄÓÅÏȼ¶ ******/ else if(OperatorValue(Top(OpHolder)) >= OperatorValue(holder)){ while((IsEmpty(OpHolder) != 1) && (OperatorValue(Top(OpHolder)) >= OperatorValue(holder))

&& (OperatorValue(Top(OpHolder))!=6)) { putc(' ',Temp); putc(Top(OpHolder),Temp); Push('B',Whereat); Pop(OpHolder); } Push(holder,OpHolder); }

else if(OperatorValue(Top(OpHolder)) < OperatorValue(holder)){

/******

Èç¹ûµ±Ç°ÔËËã·ûºÅµÄÓÅÏȼ¶´óÓÚ¶ÑÕ»ÖеÄÔËËã·ûºÅµÄÓÅÏȼ¶,Ôò½«ÆäѹÈë¶ÑÕ»ÖÐ ******/ Push(holder,OpHolder); } } holder=getc(In);

} /* WhileÑ­»·½áÊø*/ while(IsEmpty(OpHolder)!=1){ /******

×îºóÈç¹û¶ÑÕ»Öл¹ÓÐÔËËã·ûºÅ£¬ÔòÒ»²¢·Åµ½tempÖÐ ******/ Push('B',Whereat); putc(' ',Temp); putc(Top(OpHolder),Temp); Pop(OpHolder); }

MakeEmpty(OpHolder); free(OpHolder);

}

/******ÅжÏÀàÐÍ£¬1ΪÔËËã·ûºÅ£¬0Ϊ²Ù×÷Êý£¬-1Ϊ´íÎó******/ int IsOperator(char ToCompare) {

if (ToCompare == '(' || ToCompare == ')'|| ToCompare == '+' || ToCompare == '-' || ToCompare == '*'|| ToCompare == '/' || ToCompare == '^'|| ToCompare == '%') { return 1; }

else if (ToCompare == '1' || ToCompare == '2'|| ToCompare == '3' || ToCompare == '4' || ToCompare == '5'|| ToCompare == '6' || ToCompare == '7'|| ToCompare == '8' || ToCompare == '9' || ToCompare == '0'|| ToCompare == '.') { return 0; } else{ return -1; }

ÁªÏµ¿Í·þ£º779662525#qq.com(#Ìæ»»Îª@)