高手赐教!不惜高分!不够再加!

JanePeter 2003-04-25 07:40:01
不才,写了个整形常量的+,-,*,/,(,)运算符号的四则简单的混合运算。可是,怎么调试,也没有结果,请指教。具体算法是依据,严魏民的《数据结构》里的栈的实现中 的算法!原代码如下:
//////////////////////////////////函数包含////////////////////////////////////////////////////
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <iostream.h>
#include <string.h>
#include <ctype.h>
/////////////////////////////////定义数据类型,常量/////////////////////////////////////////
typedef int STATUS;
typedef char * string;
typedef struct {
double * Base;
double * Top;
int Size;
}STACK;
typedef struct {
char * Base;
char * Top;
int Size;
}STACKC;
///////////////////////////
#define TRUE 1
#define WRONG 0
#define SUCCES 1
#define FALSE 0
//////////////////////////
#define INITSIZE 50
#define INCREMENTSIZE 10
//////////////////////////////////////////////InitStack()/////////////////////////////////////
STATUS
InitStack(STACK * pStack)
{
(*pStack).Base=new double[INITSIZE];//malloc
if((*pStack).Base==NULL){return FALSE;}
(*pStack).Size=INITSIZE;
(*pStack).Top=(*pStack).Base;
return SUCCES;
}//End ( )

...全文
51 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
JanePeter 2003-04-27
  • 打赏
  • 举报
回复
楼上的,我的QQ:17108437
libiyan 2003-04-25
  • 打赏
  • 举报
回复
我用C做了一个
要的话我发给你了
你这个太长了
不想去看了
留个你的信箱
fhqiplj 2003-04-25
  • 打赏
  • 举报
回复
在调试状况下你输入了命令行参数么?
pooryaya 2003-04-25
  • 打赏
  • 举报
回复
:(
我装的是.NET,还是大会用!
:(
zhaoao 2003-04-25
  • 打赏
  • 举报
回复
太多了,看的头都大了,何必那么麻烦呢.
JanePeter 2003-04-25
  • 打赏
  • 举报
回复
////////////////////////////////PreOperator(char cFirst,char cSeconde)////////////////////////
说明:象以上这种情况是由于复制错误:本来是
///////////////////PreOperator(char cFirst,char cSeconde)//////////////////
多谢各位大虾:
不才再次感谢,许若:分再多不惜!
JanePeter 2003-04-25
  • 打赏
  • 举报
回复
////////////////////////////////ToDigit(string Str)/////////////////////**////////////////////
double
ToDigit(string Str) //这个函数要改变起指针的位置,使志向非数字位置
{ double fTemp=0;
while((*Str)<='9'&&(*Str)>='0')
{ fTemp=(fTemp*10)+(*Str)-'0';
Str++;
}
return fTemp;
}//End F()
///////////////////////////////Operator(fOperand1,cOperator1,fOperand2)///////////////////
double
Operator(double fData1,char cOperator,double fData2)
{ double fTemp;
switch(cOperator)
{ case '+': fTemp=fData1+fData2;break;
case '-': fTemp=fData1-fData2;break;
case '*': fTemp=fData1*fData2;break;
case '/': fTemp=fData1/fData2;break;
default : MistakeMessage();

}//End switch()
return fTemp;
}//End F()
////////////////////////////////PreOperator(char cFirst,char cSeconde)////////////////////////
STATUS
PreOperator(char cFirst,char cSeconde) //判别运算符的优先级别
{ if(cFirst==')'&&cSeconde=='('||cFirst=='#'&&cSeconde==')'||cFirst=='('&&cSeconde=='#')
MistakeMessage();
else if(cFirst=='('&&cSeconde==')'||cFirst=='#'&&cSeconde=='#')
return 0;
else if(cFirst=='('||cSeconde=='(')
return -1;
else if(cFirst==')'||cSeconde==')')
return 1;
else if(cFirst=='#')
return -1;
else if(cSeconde=='#')
return 1;
else if((cFirst=='+'||cFirst=='-')&&(cFirst!=cSeconde))
return -1;
else return 1;
return 100;
}//End F()
//////////////////////////////////////////////////////////////////////////////////////////////
JanePeter 2003-04-25
  • 打赏
  • 举报
回复
///////////////////////////////////Culculate(string sExpress)///////////////////////////////
STATUS
Culculate(string sExpress)
{ STACK sOperand;
STACKC sOperator;
STATUS Status;

double fOperand1,fOperand2;
double fTemp;
char *cpTemp;
char cTemp;
char cOperator1,cOperator2;
if(InitStackC(&sOperator)==FALSE)
{ cout<<"\nInitStackC"<<endl;
MistakeMessage();
}
if(InitStack(&sOperand)==FALSE)
{ cout<<"\nInitStack(&sOperand)"<<endl;
MistakeMessage();
}
if(PushC(&sOperator,'#')==FALSE)
{cout<<"PushC(&sOperator,'#')";MistakeMessage();}
cpTemp=sExpress;
cTemp=(*cpTemp);
while(1)
{ //OutputStack(sOperand);
//OutputStackC(sOperator);
if(IsOperator(cTemp)==TRUE)
{ if(cTemp=='\0')cTemp='#';
cOperator2=cTemp;
if(GetTopC(sOperator,&cOperator1)==TRUE)
{ Status=PreOperator(cOperator1,cOperator2);}
else { cout<<"GetTopC(sOperator,&cOperator1)";
MistakeMessage();return FALSE;
}
switch(Status)
{ case -1:
PushC(&sOperator,cOperator2);
cTemp=*(++cpTemp);
break;

case 0:
PopC(&sOperator,&cTemp);
if(cTemp=='#')
{
if(GetTop(sOperand,&fResulteValue)==TRUE)
{break; }
else { cout<<"\nYour total Express !So there";
MistakeMessage();return FALSE;
}
}
cTemp=*(++cpTemp);
break;
case 1:
PopC(&sOperator,&cOperator1);
Pop(&sOperand,&fOperand2);
Pop(&sOperand,&fOperand1);
fOperand2=Operator(fOperand1,cOperator1,fOperand2);
Push(&sOperand,fOperand2);
break;
default: { cout<<"\nYour Express ";
MistakeMessage();return FALSE;
}
}//End switch()
}//End if()
else if(cTemp<='9'&&cTemp>='0')
{ fTemp=ToDigit(cpTemp);
Push(&sOperand,fTemp);
cTemp=(*cpTemp);
}
else { cout<<"\nYour Express has disable character!So there";
MistakeMessage();return FALSE;
}
}//End while()
DestroyStack(&sOperand);
DestroyStackC(&sOperator);
return TRUE;
}//End F()
JanePeter 2003-04-25
  • 打赏
  • 举报
回复
////////////////////////////////////WellcomeWords()///////////////////////////////////////
void
WellcomeWords(void)
{ cout<<"\n\a\t\t\tHello!Wellecome to 阿丑 Programes!"<<endl;}
/////////////////////////////////////ByeWords()///////////////////////////////////////////
void
ByeWords()
{ cout<<"\n\n\a\t\tBYE!Thank you for useing 洛桑单增's programes!扎西德勒!\n\a"<<endl;}
/////////////////////////////////////MistakeMessage()///////////////////////////////////
void
MistakeMessage(void)
{ cout <<"\a\a\a must have some fatal ERROR!OH,SORRY!Press any key to QIUTE!"<<endl;
return ;
}//End F()
////////////////////////////////////GetExpress()//////////////////////////////////////
void
GetExpress(string sExpress)
{ cout<<"Please input your mathe express"<<endl;
scanf("%s",sExpress);
}//End F();

////////////////////////////////////IsOperator()/////////////////////////////////////////
STATUS
IsOperator(char c)
{
switch(c)
{ case '+':case '-':
case '*':case '/':
case '(':case ')':
case '#':case '\0':
return TRUE;
default : return FALSE;
}

return FALSE;
}//End F()
JanePeter 2003-04-25
  • 打赏
  • 举报
回复
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////
////////////////////功能: 实现整型常量的四则混合运算,包括表达式错误的检验////////////
////////////////////作者: 洛桑单增 ////////////////
////////////////////日期: 4月22日 ////////////////
//////////////////////////////////////////////////////////////////////////////////////////////
#include "SF3_3.h"
//////////////////
void WellcomeWords(void);
void ByeWords(void);
void MistakeMessage(void);
void GetExpress(string sExpress);
STATUS IsOperator(char c);
STATUS PreOperator(char cFirst,char cSeconde);
double Operator(double fData1,char cOperator,double fData2);
double ToDigit(string Str);
STATUS Culculate(string sExpress);
/////////////////////
double fResulteValue;
/////////////////////////////////////////////////////////////////////////////////////
//////////////////////// Main() //////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////
void
main(void)
{ string sExpress;

if((sExpress=new(char[300]))==NULL)
{ cout<<"(sExpress=new(char[300])";
MistakeMessage();
}
WellcomeWords();
GetExpress(sExpress);
if(Culculate(sExpress)==TRUE)
cout<<"\n\nThe resulte is :\t"<<fResulteValue<<endl;
else cout<<"\n\n\t\t\tWrong !Non resulte!\a\n\n\n"<<endl;
ByeWords();
delete []sExpress;
return;
}//End ()
JanePeter 2003-04-25
  • 打赏
  • 举报
回复
///////////////////////////////////////Pop ()//////////////////////////////////////////////
STATUS
PopC(STACKC *pStackC,char *cpData)
{ if(StackCEmpty((*pStackC))==TRUE)return FALSE;
else{
(*pStackC).Top--;
*cpData=*(*pStackC).Top;
}
return SUCCES;
}//End ()
//////////////////////////////////////GetTop() ////////////////////////////////////////////////
////////////////////////////////////得到栈顶的元素/////////////////////////////////////

STATUS
GetTopC(STACKC StackC,char *cpData)
{ if(StackCEmpty(StackC)==TRUE)return FALSE;
else {
*cpData=*(StackC.Top-1);
return SUCCES;
}
}//End()
////////////////////////////////OutputStack ()///////////////////////////////////////////////
////////////////////////////////输出栈的内容/////////////////////////////////////////////
void
OutputStackC(STACKC StackC)
{ int iStart=1;
int iEnd=StackCLength(StackC);
char* p=StackC.Base;
printf("\n\aNow,The stack's charater is bellow:\n");
printf("\n//////////////////////////\a///////////////////////////////////\n");
while (iStart<=iEnd)
{ printf(" %c",*p++);
if(iStart%5==0)printf("\n");
iStart++;
}
}//End ()
mfs 2003-04-25
  • 打赏
  • 举报
回复
up
JanePeter 2003-04-25
  • 打赏
  • 举报
回复
//////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////为字符型数据准备的///////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////


//////////////////////////////////////////////InitStack()/////////////////////////////////////
STATUS
InitStackC(STACKC * pStack)
{ (*pStack).Base=new char[INITSIZE];
if((*pStack).Base==NULL)return FALSE;
(*pStack).Size=INITSIZE;
(*pStack).Top=(*pStack).Base;
return SUCCES;
}//End ( )
/////////////////////////////////////////////DestroyStack()//////////////////////////////////
void
DestroyStackC(STACKC * pStack)
{ (*pStack).Size=0;
(*pStack).Top=NULL;
delete[](*pStack).Base;
}//End ( )
/////////////////////////////////////////// ClearStack() /////////////////////////////////
////////////////////////////////////////////清空栈///////////////////////////////////////
void
ClearStackC(STACKC *pStack)
{
(*pStack).Top=(*pStack).Top;
}//End ( )
//////////////////////////////////////////StackEmpty()///////////////////////////////////////
//////////////////////////////////////////判别是否为空///////////////////////////////////
STATUS
StackCEmpty(STACKC Stack)
{ if(Stack.Top-Stack.Base<=0)return TRUE;
else return FALSE;
}//End ()
////////////////////////////////////////StackOver ()////////////////////////////////////////
////////////////////////////////////////判别栈非否满////////////////////////////////////////
STATUS
StackCOver(STACKC Stack)
{ if(Stack.Top-Stack.Base>=Stack.Size)return TRUE;
else return FALSE;
}//End ()
/////////////////////////////////////// StackLength()////////////////////////////////////////
///////////////////////////////////////求栈的元素个数///////////////////////////////////////
int
StackCLength(STACKC Stack)
{ return Stack.Top-Stack.Base;
}//End ()
///////////////////////////////////////Push ()//////////// //////////////////////////////////
STATUS
PushC(STACKC *pStackC,char cData)
{ if(StackCOver((*pStackC))==TRUE)
{ (*pStackC).Base=(char *)realloc((*pStackC).Base,((*pStackC).Size+INCREMENTSIZE)*sizeof(char));
if((*pStackC).Base==NULL)return FALSE;
}
*(*pStackC).Top=cData;
(*pStackC).Top++;
return SUCCES;
}//End ()
JanePeter 2003-04-25
  • 打赏
  • 举报
回复
/////////////////////////////////////// StackLength()////////////////////////////////////////
int
StackLength(STACK Stack)
{ return Stack.Top-Stack.Base;
}//End ()
///////////////////////////////////////Push1 ()//////////// //////////////////////////////////
STATUS
Push(STACK *pStack,double dfData)
{ if(StackOver((*pStack))==TRUE)
{ (*pStack).Base=(double *)realloc((*pStack).Base,((*pStack).Size+INCREMENTSIZE)*sizeof(double));
if((*pStack).Base==NULL)return FALSE;
}
*(*pStack).Top=dfData;
(*pStack).Top++;
return SUCCES;
}//End ()
///////////////////////////////////////Pop ()//////////////////////////////////////////////
STATUS
Pop(STACK *pStack,double *fpData)
{ if(StackEmpty((*pStack))==TRUE)return FALSE;
else{
(*pStack).Top--;
*fpData=*(*pStack).Top;
}
return SUCCES;
}//End ()
//////////////////////////////////////GetTop() ////////////////////////////////////////////////
STATUS
GetTop(STACK Stack,double *fpData)
{ if(StackEmpty(Stack)==TRUE)return FALSE;
else {
*fpData=*(Stack.Top-1);
return SUCCES;
}
}//End()
////////////////////////////////OutputStack ()///////////////////////////////////////////////
void
OutputStack(STACK Stack)
{ int iStart=1;
int iEnd=StackLength(Stack);
double * p=Stack.Base;
printf("\n\aNow,The stack's nummber is bellow:\n");
printf("\n/////////////////////////////////\a///////////////////////////////////\n");
while (iStart<=iEnd)
{ printf(" %d",*p++);
if(iStart%5==0)printf("\n");
iStart++;
}
}//End ()
JanePeter 2003-04-25
  • 打赏
  • 举报
回复

/////////////////////////////////////////////DestroyStack()//////////////////////////////////
void
DestroyStack(STACK * pStack)
{ (*pStack).Size=0;
(*pStack).Top=NULL;
delete [](*pStack).Base;//free
}//End ( )

/////////////////////////////////////////// ClearStack() ///////////////////////////////////////
void
ClearStack(STACK *pStack)
{
(*pStack).Top=(*pStack).Top;
}//End ( )
//////////////////////////////////////////StackEmpty()///////////////////////////////////////
STATUS
StackEmpty(STACK Stack)
{ if(Stack.Top-Stack.Base==0)return TRUE;
else return FALSE;
}//End ()

////////////////////////////////////////StackOver ()///////////////////////////////////////////
STATUS
StackOver(STACK Stack)
{ if(Stack.Top-Stack.Base>=Stack.Size)return TRUE;
else return FALSE;
}//End ()

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧