| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 464 人关注过本帖
标题:帮忙改一下代码啊。。
只看楼主 加入收藏
shenyulv
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:166
专家分:150
注 册:2009-3-8
结帖率:96.43%
收藏
 问题点数:0 回复次数:0 
帮忙改一下代码啊。。
这是一个用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++最好能体现类,继承,多态,重载,模板中的几个思想。谢谢了~~~
搜索更多相关主题的帖子: 代码 
2010-01-14 15:17
快速回复:帮忙改一下代码啊。。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016693 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved