本帖原为<zhendeaini>楼主的帖,由于本人操作不慎把帖子给结了,本人深表歉意,
特为<zhendeaini>楼主再开一帖,以弥补我的过错.恳请大家帮帮忙---- 以下为<zhendeaini>楼主的原帖.
// 123.cpp : Defines the entry point for the console application.
#include "stdafx.h"
#include<iostream>
#include<stdio.h>
using namespace std;
#define stackinitsize 100
#define increasize 10
typedef struct{
int stacksize;
char *base,*top;
}opt;
char precede(char x,char y)
{
switch(x)
{case'+':
switch(y)
{case'+':return'>';
case'-':return'>';
case'*':return'<';
case'/':return'<';
case'(':return'<';
case')':return'>';
case'#':return'>';
}
case'-':
switch(y)
{case'+':return'>';
case'-':return'>';
case'*':return'<';
case'/':return'<';
case'(':return'<';
case')':return'>';
case'#':return'>';
}
case'*':
switch(y)
{case'+':return'>';
case'-':return'>';
case'*':return'>';
case'/':return'>';
case'(':return'<';
case')':return'>';
case'#':return'>';
}
case'/':
switch(y)
{case'+':return'>';
case'-':return'>';
case'*':return'>';
case'/':return'>';
case'(':return'<';
case')':return'>';
case'#':return'>';
}
case'(':
switch(y)
{case'+':return'<';
case'-':return'<';
case'*':return'<';
case'/':return'<';
case'(':return'<';
case')':return'=';
case'#':return' ';
}
case')':
switch(y)
{case'+':return'>';
case'-':return'>';
case'*':return'>';
case'/':return'>';
case'(':return' ';
case')':return'>';
case'#':return'>';
}
case'#':
switch(y)
{case'+':return'<';
case'-':return'<';
case'*':return'<';
case'/':return'<';
case'(':return'<';
case')':return' ';
case'#':return'=';;
}
}}
int createstack(opt &fu)
{
fu.base=(char *)malloc(sizeof(char)*stackinitsize);
if(!fu.base)return 0;
fu.top=fu.base;
fu.stacksize=0;
return 1;
}
int pushstack(opt &fu,char e)
{
if(!fu.base)return 0;
if(fu.top-fu.base==fu.stacksize){fu.base=(char *)realloc(fu.base,(fu.stacksize+increasize)*sizeof(char));
if(!fu.base)return 0;
fu.top=fu.base+fu.stacksize;
fu.stacksize=fu.stacksize+increasize;
}
*fu.top++=e;
return 1;
}
int popstack(opt &fu,char &e)
{
if(!fu.base)return 0;
e=*--fu.top;
return 1;
}
int getstack(opt fu,char &e)
{
if(!fu.base)return 0;
e=*fu.top;
return 1;
}
int fuhao(char &c,int &j)
{int i;
char str[10]={'0','1','2','3','4','5','6','7','8','9'};
for(i=1;i<=10;i++)
{
if(c==str[i])
{j=i;return 0;}
else return 1;
}
return 1;
}
int operate(char a,char theta, char b)
{
int c,d;
fuhao(a,c);fuhao(b,d);
switch(theta)
{case'+':return(c+d);
case'-':return(c-d);
case'*':return(c*d);
case'/':return(c/d);
}
}
int main()
{int l(0);
opt fa,data;
char c,e,x,a,b,theta,p;
if(!createstack(fa))return 0;
if(!pushstack(fa,'#'))return 0;
if(!createstack(data))return 0;
cin>>c;
if(!getstack(fa,e))return 0;
while(c!='#'|| e!='#')
{
if(!fuhao(c,l)){ pushstack(data,c);cin>>c;}
else
getstack(fa,e);
switch( precede(e,c))
{ case'<':{pushstack(fa,c);cin>>c;break;}
case'=':{popstack(fa,x);cin>>c;break;}
case'>':{popstack(fa,theta);popstack(data,b);popstack(data,a);
pushstack(data,operate(a,theta,b));break;
}
}
}
getstack(data,p);
cout<<p<<endl;return 1;
}
无法实现多项式的计算