求大神指点
时间:2011-12-08
来源:互联网
#include<iostream>
using namespace std;
#include<stdio.h>
#include <stdlib.h>
const int Initsize=100;//栈的长度
int change1(char a)//由字符转换成数字
{
return ((int)a-48);
}
int change2(int a)//由数字转换成字符
{
return (char)(a+48);
}
class stack{
public:
char *base;//栈的基指针
char *top;//栈的顶指针
friend void initstack(stack &s);//构造栈
friend void push(stack &s,char a);//压入栈
friend int gettop(stack &s);//得到栈顶元素不删除
friend int pop(stack &s);//得到栈顶元素并删除
};
void initstack(stack &s)
{
s.base=new char[Initsize];
if(s.base)
s.top=s.base;
}
void push(stack &s,char a)
{
if(s.top-s.base<=Initsize)
{
*s.top=a;
s.top++;
}
else
exit(0);
}
int gettop(stack &s)
{
if(s.top==s.base)
exit(0);
char a=*(s.top-1);
return change1(a);
}
int pop(stack &s)
{
if(s.top==s.base)
exit(0);
char a=*(s.top--);
return change1(a);
}
int operatorsize(char a)//操作符的优先级
{
int n;
switch(a)
{
case '#':n=1;break;
case '(':n=2;break;
case '+':
case '-':n=3;break;
case '*':
case '/':n=4;break;
default:exit(1);
}
return n;
}
void operate(stack &s,char a)
{
switch(a)
{
case '+':push(s,change2(pop(s)+change1(a)));break;
case '-':push(s,change2(pop(s)-change1(a)));break;
case '*':push(s,change2(pop(s)*change1(a)));break;
case '/':push(s,change2(pop(s)/change1(a)));break;
case '#':break;
default:exit(1);break;
}
}
int main()
{
char c;
stack optr,opnd;
initstack(optr);push(optr,'#');
initstack(opnd);
cout<<"*********欢迎使用本系统**********"<<endl;
cout<<"请输入表达式: "<<endl;
c=getchar();
cout<<"计算结果是:";
while(c='#'||gettop(optr)!='#')
{
if(!operatorsize(c))
{
push(opnd,c);
}
else
{
int m,s,n;
s=operatorsize(gettop(optr));//栈顶操作数优先级
n=operatorsize(c);//当前操作数优先级
m=s-n;
if(m>0)
push(optr,c);
else if(m=0)
pop(optr);
else
{
operate(opnd,c);
pop(optr);
}
}
c=getchar();
}
cout<<change1(gettop(opnd));
return 0;
}
这是一个数值表达式求值问题,编译没错就是得不出结果,求大神指点
using namespace std;
#include<stdio.h>
#include <stdlib.h>
const int Initsize=100;//栈的长度
int change1(char a)//由字符转换成数字
{
return ((int)a-48);
}
int change2(int a)//由数字转换成字符
{
return (char)(a+48);
}
class stack{
public:
char *base;//栈的基指针
char *top;//栈的顶指针
friend void initstack(stack &s);//构造栈
friend void push(stack &s,char a);//压入栈
friend int gettop(stack &s);//得到栈顶元素不删除
friend int pop(stack &s);//得到栈顶元素并删除
};
void initstack(stack &s)
{
s.base=new char[Initsize];
if(s.base)
s.top=s.base;
}
void push(stack &s,char a)
{
if(s.top-s.base<=Initsize)
{
*s.top=a;
s.top++;
}
else
exit(0);
}
int gettop(stack &s)
{
if(s.top==s.base)
exit(0);
char a=*(s.top-1);
return change1(a);
}
int pop(stack &s)
{
if(s.top==s.base)
exit(0);
char a=*(s.top--);
return change1(a);
}
int operatorsize(char a)//操作符的优先级
{
int n;
switch(a)
{
case '#':n=1;break;
case '(':n=2;break;
case '+':
case '-':n=3;break;
case '*':
case '/':n=4;break;
default:exit(1);
}
return n;
}
void operate(stack &s,char a)
{
switch(a)
{
case '+':push(s,change2(pop(s)+change1(a)));break;
case '-':push(s,change2(pop(s)-change1(a)));break;
case '*':push(s,change2(pop(s)*change1(a)));break;
case '/':push(s,change2(pop(s)/change1(a)));break;
case '#':break;
default:exit(1);break;
}
}
int main()
{
char c;
stack optr,opnd;
initstack(optr);push(optr,'#');
initstack(opnd);
cout<<"*********欢迎使用本系统**********"<<endl;
cout<<"请输入表达式: "<<endl;
c=getchar();
cout<<"计算结果是:";
while(c='#'||gettop(optr)!='#')
{
if(!operatorsize(c))
{
push(opnd,c);
}
else
{
int m,s,n;
s=operatorsize(gettop(optr));//栈顶操作数优先级
n=operatorsize(c);//当前操作数优先级
m=s-n;
if(m>0)
push(optr,c);
else if(m=0)
pop(optr);
else
{
operate(opnd,c);
pop(optr);
}
}
c=getchar();
}
cout<<change1(gettop(opnd));
return 0;
}
这是一个数值表达式求值问题,编译没错就是得不出结果,求大神指点
作者: xinxisxx 发布时间: 2011-12-08
int operatorsize(char a)中default:时候你直接退出了exit(1);
单步debug一下
单步debug一下
作者: duzhongming 发布时间: 2011-12-08
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28