|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
源代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>//要用到isdigit()
#define INCREASEMENT 10//若栈空间不够,每次多申请INCREASEMENT这么多空间
#define MAXSIZE 100
#define BUFFER 10
#define OK 1
#define ERROR 0
typedef double ElemType;
typedef int Stutas;
typedef struct
{
ElemType *top;
ElemType *base;
int stacksize;//目前栈最大容量
}SqStack;
//创建一个栈
Stutas Init(SqStack *S)
{
S->base = (ElemType *)malloc(MAXSIZE*sizeof(ElemType));
if(!S->base)
{
printf("error:内存分配出错!\n");
return ERROR;
}
S->top = S->base;
S->stacksize = MAXSIZE;
return OK;
}
//入栈操作,将元素e压入栈
Stutas Push(SqStack *S,ElemType e)
{
if(S->top-S->base == S->stacksize)//栈空间不够用,则追加INCREASEMENT这么多空间
{
S->base = (ElemType*)realloc(S->base,(S->stacksize+INCREASEMENT)*sizeof(ElemType));
if(!S->base)
{
printf("error:内存分配出错!\n");
return ERROR;
}
S->top = S->base+S->stacksize;//设置栈顶
S->stacksize = S->stacksize+INCREASEMENT;//设置栈可用空间
}
*(S->top) = e;
S->top++;
return OK;
}
//出栈操作,删除栈顶元素,赋值给e
Stutas Pop(SqStack *S,ElemType *e)
{
if(S->top == S->base)//如果栈空,则显示出错信息
{
printf("栈为空,不能删除栈顶元素!");
return ERROR;
}
*e = *(S->top-1);
S->top--;
return OK;
}
int main()
{
char e;
double c,d;
SqStack S;
char str[BUFFER];
int i = 0;
Init(&S);
printf("请输入逆波兰表达式,数字与表达式之间用空格隔开,整个表达式用#结束!\n");
scanf("%c",&e);//怎么转换为数字
getchar();
while( e != '#' )
{
while( isdigit(e) || e=='.')//注意怎么处理字符到数字的转换,以及怎么支持浮点型数据的,定义一个buffer
{
str[i] = e;
i++;
str[i] = '\0';
if( i>= BUFFER )
{
printf("输入的数字超过给定的精度\n");
return -1;
}
scanf("%c",&e);
getchar();
if( e == ' ' )
{
d = atof(str);//atof()将一个字符串转换为浮点型数
Push(&S,d);
i = 0;
break;
}
}
switch( e )//用switch较好,可以很好地+-*/,否则无法实现
{
case '+':
Pop(&S,&c);
Pop(&S,&d);
Push(&S,d+c);
break;
case '-':
Pop(&S,&c);
Pop(&S,&d);
Push(&S,d-c);//对于减的时候,d先还是c先很重要
break;
case '*':
Pop(&S,&c);
Pop(&S,&d);
Push(&S,d*c);
break;
case '/':
Pop(&S,&c);
Pop(&S,&d);
if( c== 0)
{
printf("分子不能为0\n");
return -1;
}
else
{
Push(&S,d/c);//对于除的时候,d先还是c先很重要
break;
}
}
scanf("%c",&e);
getchar();
}
printf("最终的结果是:\n");
Pop(&S,&d);
printf("%f\n",d);
return 0;
}
问题如下:
小甲鱼老师说没有这句的话,会出错str[i] = '\0';
但是我的没有也不会出错,请问问题是什么? |
|