帮忙改一下代码啊。。
这是一个用c语言写的简易计算器的代码,我想把它改为c++的,可是我c++学的不精,不知道怎么改,大家帮帮忙吧。 #include <iostream.h>
#include <stdio.h>
#include <string>
#include <cmath>
struct shuju//数据的每一个节点
{double a;shuju * next;};
struct yunsuan //元算符的每一个节点
{char a;yunsuan * next;};//设计的是链栈程序
shuju * tops;yunsuan * topc;int i;
///字符串到浮点型的转换///..只保留6位有效数字
////在字符串中提取数字
double ftd(char * a)
{double sj;double j=-1.0;sj=0;
while(*a>=48 && *a <=57){sj=10*sj+*a-48;a++;i=i+1;}
if(*a==46){a+=1;i=i+1;while(*a>=48 && *a <=57){
sj+=(*a-48.0)*(pow(10.0,j));a+=1;i=i+1;j-=1.0;}}
return sj;}
void pushs(double x) //
{shuju * p;p=new shuju;p->a=x;//数据的进出“栈”
p->next=tops;tops=p;}
double pops(shuju * a)
{
shuju * q; double pq;
q=tops;pq=q->a ;
tops=tops->next;
free(q); return pq;
}
void push(char x)
{ yunsuan * p;p=new yunsuan;
p->a=x;p->next=topc;topc=p; }
char pop(yunsuan * a)//运算符的进出“栈”
{yunsuan * q;char ss ;q=topc;ss=q->a;
topc=topc->next; free(q); return ss ;}
double zz(double a,char b,double c)
{switch(b){
case 42:return a*c;
case 43:return a+c;
case 45:return c-a;
case 47:{if(a==0){cout < <"输入有错!" < <endl;}else return c/a;}
}}//判断现在的字符是数字还是符号
int pan(char * a)
{if(*a>=48 && *a <=57)return 1;//数据
if(*a>=40 && *a <=43||*a==45||*a==47)return 2;//符号
return 0;///错误、、、输入的不是规定的字符
}
///////比较现在的两个运算符比判断下一步的计划
char bijiao(char a,char b)
{ char pq;
if(b==41||a==42&&b!=40||a==47&&b!=40||(b==43||b==45)&&(a==43||a==45))
pq=60;//将前一个运算运算
if(b==40||a==40||(b==42||b==47)&&(a==43||a==45))
pq=62;///将刚刚进去的运算进栈
return pq;}
int main()
{ double mm=0;i=0;tops=new shuju;topc=new yunsuan;tops->next=NULL;
topc->next=NULL;char as[100];
cout < <"*******************************************************************************" < <endl < <endl;
cout < <"************************************作品简介***********************************" < <endl < <endl;
cout < <" 该软件用于简单的加、 减、乘、除四则运算!" < <endl < <endl;
cout < <" 允许输入 0、1、2、3、4、5、6、7、8、 9、 (、)、*、/、+、-。" < <endl < <endl;
cout < <" 请输入要计算的算式:(比如输入 4+(1+2*3)/5-6 回车 ,输出 :其数值为: -0.6" < <endl;
cout < <" 直接输入 任意非法字符 结束程序!" < <endl;
scanf("%s",as);
while(pan(&as[0])!=0)
{ i=0;
while(as[i]!=0)/////////////////////////////////jisuan
switch(pan(&as[i]))
{
case 1:{pushs(ftd(&as[i]));break;}
case 2:
{ if(topc->next==NULL){push(as[i]),i=i+1;}
else
switch(bijiao(topc->a,as[i]))
{
case 60:
{ double l=pops(tops);
mm=zz(l,pop(topc),pops(tops));
pushs(mm);
if(char(as[i])==41)
{ char zl;
zl=pop(topc);
while(char(zl)!=40)
{ double l=pops(tops);
mm=zz(l,zl,pops(tops));
pushs(mm);zl=pop(topc);
}
}
else push(as[i]);
while(topc->next!=NULL&&topc->next->next!=NULL&&bijiao(topc->next->a,topc->a)==60)
{
char ls;double l=pops(tops);
ls=pop(topc);
mm=zz(l,pop(topc),pops(tops));
pushs(mm);push(ls);
}
i=i+1;break;}
case 62:{push(as[i]);i=i+1;break;}
}
break;}
default:{cout < <"输入有误!" < <endl;break;}
}
while(topc->next!=NULL) {double l=pops(tops);mm=zz(l,pop(topc),pops(tops));pushs(mm);}
cout < <"其数值为: " < <pops(tops) < <endl < <endl < <endl;
cout < <" 直接输入 任意非法字符 结束程序! 或者继续输入要计算的算式!" < <endl;
scanf("%s",as);
}
return 0;
}
c++最好能体现类,继承,多态,重载,模板中的几个思想。谢谢了~~~