C++程序问题

[复制链接]
查看11 | 回复3 | 2008-12-12 10:47:49 | 显示全部楼层 |阅读模式
带括号的表达式求值:以字符序列的形式从终端输入不含变量的整数表达式,判断括号匹配是否正确,并利用给定的算符优先关系,实现对算术四则混合运算表达式的求值,并演示在求值过程中运算符栈、操作数栈、输入字符和主要操作的变化过程。
下面是我写的程序,希望高手们帮忙改改!!我刚学数据结构,不大会写,如果高手们觉得我写的实在是没法看,有想展示一下的或者想温顾一下的话可以重新谢谢!小弟在此谢过了!
#include
using namespace std;
#define N 50
#define TRUE 1
#define FALSE 0
#include "stack"
#include
#include
int Cint(char mychar){
return (mychar-48);
}
double Calc(double a,double b,char c){
double result;
switch(c){
case '+':result=a+b;break;
case '-':result=a-b;break;
case '*':result=a*b;break;
case '/':result=a/b;break;
}
return result;
}
char Priority(char y,char x){
char priority='';break;
case '*':
case '/':if(y=='(' || y=='#'|| y=='+' || y=='-')priority='>';break;
case '(':priority='>';break;
case ')':if(y=='(')priority='=';break;
case '#':if(y=='#')priority='=';break;
default:priority='E';
}
return priority;
}
bool in(char c){
if(c=='+'||c=='-'||c=='*'||c=='/')
return TRUE;
}
void main()
{ char c,theta;
int a,b,t;
stackOPTR;
OPTR.push('#');
stackOPND;
c=getchar();
while(c!='#'||OPTR.top!='#')
{
if(!in(c))
{ OPND.push(c);
c=getchar();
}
else
switch(Priority(OPTR.top,c))
{ case '':OPTR.pop();

OPND.pop();

OPND.pop();

OPND.push(Calc(a,b,theta));

break;
}
}
}
下面是编译错误:
error C2664: 'Priority' : cannot convert parameter 1 from 'const int &(void) const' to 'char';我不明白,水平太低
高手们发扬风格啊 !这种问题对你们来说简单,对我来说,哎.........!!
我已经把 stackOPTR;改成 stackOPTR;,但错误依旧

回复

使用道具 举报

千问 | 2008-12-12 10:47:49 | 显示全部楼层
你建了两个栈,一个是操作数栈,一个是运算符栈,stackOPTR应该改为stackOPTR,然后取栈顶元素是OPTR.top();...
回复

使用道具 举报

千问 | 2008-12-12 10:47:49 | 显示全部楼层
你的Priority函数的第一个参数是Char型,而传递过去的参数是OPTR.top,不是Char类型。因为stackOPND你这里定义也是Int...
回复

使用道具 举报

千问 | 2008-12-12 10:47:49 | 显示全部楼层
顶楼上的,调用Priority函数时传递的参数不是char类型。...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行