c语言求两字母ASCII值的和,求教!我想显示数字但是现在显示的却是数字在ASCII码中对应的符...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

以下是程序,可能比较长,主要的问题是比如计算表达式6+3*(9-5)/2-8可得结果是4,但是如果输入3*4,则得到结果'

#include

using namespace std;

#include

#define OK 1

#define ERROR 0

#define OVERFLOW -2

#define MAXSIZE 100

typedef int Status;

typedef struct

{

char *base;

char *top;

int stacksize;

}SqStack;

Status InitStack(SqStack &S)

{

S.base=new char[100];

if(!S.base) exit(OVERFLOW);

else S.top=S.base;

S.stacksize=MAXSIZE;

return OK;

}

Status Push(SqStack &S,char e)

{

if(S.top-S.base==S.stacksize) return ERROR;

else *S.top++=e;

return OK;

}

char GetTop(SqStack S)

{

if(S.top!=S.base)

return *(S.top-1);

else exit(ERROR);

}

Status Pop(SqStack &S,char &e)

{

if(S.top==S.base) return ERROR;

else {--S.top;e=*S.top;}

return OK;

}

Status In(char c)

{

if(c>='0'&&c<='9') return 0;

else if(c=='+'||c=='-'||c=='*'||c=='/'||c=='('||c==')'||c=='#') return 1;

else exit(ERROR);

}

int Precede(char a,char b)//a为栈顶元素,b为读到的元素//令a等于b为7,a大于b为8,a小于b为9

{

if(b=='+')

{

if(a=='('||a=='#') return(9);

else return(8);

}

if(b=='-')

{

if(a=='('||a=='#') return(9);

else return(8);

}

if(b=='*')

{

if(a=='*'||a=='/'||a==')') return(8);

else return(9);

}

if(b=='/')

{

if(a=='*'||a=='/'||a==')') return(8);

else return(9);

}

if(b=='(') return(9);

if(b==')')

{

if(a=='(') return(7);

return(8);

}

if(b=='#')

{

if(a=='#') return(7);

else return(8);

}

}

int Operate(int a,char theta,int b)

{

if(theta=='+') return (a+b-'0');

else if(theta=='-') return (a-b+'0');

else if(theta=='*') return ((a-'0')*(b-'0')+'0');

else if(theta=='/') return ((a-'0')/(b-'0')+'0');

}

char EvaluateExpression(char s[])

{

char x,theta,ch;

char a,b,r;

int i;

SqStack OPTR,OPND;

InitStack(OPTR);

InitStack(OPND);

Push(OPTR,'#');

for(i=0;i

{

ch=s[i];

if(!(r=In(ch))){Push(OPND,ch);}

else

{

switch(Precede(GetTop(OPTR),ch))

{

case 9://a小于b为9

Push(OPTR,ch);

break;

case 8://a大于b为8//应该是从此处开始无法将字符输入到OPTR中

Pop(OPTR,theta);

Pop(OPND,b);

Pop(OPND,a);

Push(OPND,Operate(a,theta,b));

i=i-1;

break;

case 7://a等于b为7

Pop(OPTR,x);

break;

}

}

}

return GetTop(OPND);

}

int main()

{

cout<

cout<

char e[100];

gets(e);

char result;

result=EvaluateExpression(e);

cout<

cout<

cout<

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值