程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> c++-C++中一個類型轉換的問題。

c++-C++中一個類型轉換的問題。

編輯:編程綜合問答
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;
}

最佳回答:


我已經把代碼附全了,還望幫助!謝謝!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved