白於青 2015-04-11 08:45 采纳率: 0%
浏览 1911
已采纳

C++中一个类型转换的问题。

//第一个
// Expression.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include
#include"SeqStack.cpp"
using std::cout;
using std::endl;
using std::cerr;

double Operate(double a,char pre_op,double b);
char Precede(char pre_op,char ch);
double Expression_Eval();

int _tmain(int argc, _TCHAR* argv[])
{
double value=Expression_Eval();
cout<<value<<endl;
return 0;
}

double Expression_Eval()
{
SeqStack OPTR;
SeqStack OPND;
OPTR.Push('@');
char ch = getchar();
while(ch!='@' || OPTR.Top()!='@')
{
if(ch>='0' && ch<='9')
{
OPND.Push(ch-'0');
ch=getchar();
}
else
{
char pre_op = OPTR.Top();
switch(Precede(pre_op,ch))
{
case'<':
OPTR.Push(ch);
ch = getchar();
break;
case'=':
OPTR.Pop();
ch = getchar();
break;
case'>':
double b = OPND.Pop();
double a = OPND.Pop();
pre_op = OPTR.Pop();
OPND.Push(Operate(a,pre_op,b));
break;
}
}
}
return OPND.Top();
}

double Operate(double a,char pre_op,double b)
{
switch(pre_op)
{
case'+': return a+b;
case'-': return a-b;
case'*': return a*b;
case'/': return a/b;
default: cout<<"不能进行该运算。"<<endl;
}
return 0;
}

char Precede(char pre_op,char ch)
{
char operates[7][7] =
{
'>' , '>' , '<' , '<' , '<' , '>' , '>' ,
'>' , '>' , '<' , '<' , '<' , '>' , '>' ,
'>' , '>' , '>' , '>' , '<' , '>' , '>' ,
'>' , '>' , '>' , '>' , '<' , '>' , '>' ,
'<' , '<' , '<' , '<' , '<' , '=' , ' ' ,
'>' , '>' , '>' , '>' , ' ' , '>' , '>' ,
'<' , '<' , '<' , '<' , '<' , ' ' , '='
};
int x=0,y=0;
switch(pre_op)
{
case'+' :x=0;break;
case'-' :x=1;break;
case'*' :x=2;break;
case'/' :x=3;break;
case'(' :x=4;break;
case')' :x=5;break;
case'@' :x=6;break;
default:cerr<<"输入错误。"<<endl;
}
switch(ch)
{
case'+' :y=0;break;
case'-' :y=1;break;
case'*' :y=2;break;
case'/' :y=3;break;
case'(' :y=4;break;
case')' :y=5;break;
case'@' :y=6;break;
default :cerr<<"输入错误。"<<endl;
}
return operates[x][y];
}
//第二个
#ifndef SEQSTACK_H
#define SEQSTACK_H

template
class SeqStack
{
T data[MaxSize]; //存放栈元素的数组
int top; //栈顶指针,指定栈顶元素在数组中的下标
public:
SeqStack(); //构造函数
void Push(T x); //入栈
T Pop(); //出栈
T Top(); //取栈顶元素,元素并不出栈
bool Empty(); //判断栈是否为空
bool Full(); //判断栈是否满了
};

#endif
//第三个
#include "stdafx.h"
#include"SeqStack.h"
#include
using namespace std;

//初始化
template
SeqStack::SeqStack()
{
top=-1;
}

//入栈操作
template
void SeqStack::Push(T x)
{
if(top==MaxSize-1)
{
cerr<<"上溢。"<<endl;
exit(1);
}
++top;
data[top]=x;

}

//出栈,类似于删除
template
T SeqStack::Pop()
{
if(top==-1)
{
cerr<<"下溢。"<<endl;
exit(1);
}
int x=data[top];
top--;
return x;
}

//取出栈元素
template
T SeqStack::Top()
{
if(top==-1)
{
cerr<<"下溢。"<<endl;
exit(1);
}
return data[top];
}

//判断栈是否满了
template
bool SeqStack::Full()
{
if(top==MaxSize-1)
{
cerr<<"栈已经满了。"<<endl;
return true;
}
else
cout<<"未满"<<endl;
return false;
}

//判断栈是否为空
template
bool SeqStack::Empty()
{
if(top==-1)
{
cerr<<"栈为空。"<<endl;
return true;
}
return false;
}

  • 写回答

5条回答 默认 最新

  • 白於青 2015-04-11 09:01
    关注

    我已经把代码附全了,还望帮助!谢谢!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥20 双层网络上信息-疾病传播
  • ¥50 paddlepaddle pinn
  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 请问这个是什么意思?
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样