看一下这个程序

zjk2752 2008-04-10 04:50:11
#include<iostream>
#include<string>
#include<stdio.h>
using namespace std;
typedef struct
{
char*top;
char*base;
}stack;
typedef struct
{
float*top;
float*base;
}stackshu;
char better(char a,char b);//优先级比较
int Ident(char c);//判断是数值字符还是运算符字符,返回为1时作为数值标志,0为运算符标志
float * dealing(float* d,char* e);//对运算进行处理
float mathget(char* f);//得到数值
float result(int g);//10的倍数
void main()
{
float stack1[100];
char stack2[100],getstr[100];
stack2[0]='=';
stackshu p1;
stack p2;
p1.top=p1.base=stack1;
p2.top=p2.base= stack2;
char * getchar;
getchar=gets(getstr);
while(*getchar!='='||*p2.top!='=')
{
cout<<*getchar<<"***"<<endl;
if(Ident(*getchar)==1)
{
*p1.top=mathget(getchar); //把数值字符的数值赋给数值栈
p1.top++;
}
else if((Ident(*getchar))==0)
{
switch(better(*p2.top,*getchar))//是运算符的话把它与顶元素的运算符进行优先级比较
{
case '<':
*++p2.top=*getchar;
++getchar;
break;
case '=':
--p2.top;
++getchar;
break;
case '>':
p1.top =dealing(p1.top,p2.top ); //进行运算处理
break;
}//switch
}
}//while
cout<<"表达式的结果为"<<*--p1.top<<endl;
}//main
char better(char a,char b)//优先级比较
{
if(a=='+')
{
switch(b)
{
case'+':
case'-':
case')':
case'=':
return '>';
break;
case'*':
case'/':
case'(':
return'<';
break;
}
}
else if(a=='-')
{
switch(b)
{
case'+':
case'-':
case')':
case'=':
return '>';
break;
case'*':
case'/':
case'(':
return'<';
break;
}
}
else if(a=='*')
{
switch(b)
{
case'+':
case'-':
case'*':
case'/':
case')':
case'=':
return '>';
break;
case'(':
return '<';
break;
}
}
else if(a=='/')
{
switch(b)
{
case'+':
case'-':
case'*':
case'/':
case')':
case'=':
return '>';
break;
case'(':
return '<';
break;
}
}
else if(a=='(')
{
switch(b)
{
case '+':
case '-':
case '*':
case '/':
case '(':
return '<';
break;
case ')':
return '=';
break;
case '=':
cout<<"此表达式的语法错误"<<endl;
break;
}
}
else if(a==')')
{
switch(b)
{
case '+':
case '-':
case '*':
case '/':
case ')':
case '=':
return '>';
break;
case '(':
cout<<"此表达式的语法错误"<<endl;
break;
}
}

else if(a=='=')
{
switch(b)
{
case '+':
case '-':
case '*':
case '/':
case '(':
return '<';
break;
case ')':
cout<<"此表达式的语法错误"<<endl;
break;
}
}
}
int Ident(char p)//判断是数值字符还是运算符字符,返回为1时作为数值标志,0为运算符标志
{
if((p-'0')>=0&&(p-'0')<=9)
return 1;
else
return 0;
}
float mathget(char* p)//得到数值
{
float sum=0.0;
int i=0;
char*p1=p;
while((*p-'0')>=0&&(*p-'0')<=9)
{
++p;
++i;
}
for(int j=i-1;j>=0;j--)
{
sum+=(*p1-'0')*result(j);
++p1;
}
return sum;
}
float result(int n)//10的倍数
{
float sum=1.0;
for(int i=1;i<=n;i++)
{
sum=sum*10;
}
return sum;
}
float * dealing(float* p,char* ch)//对运算进行处理
{
float a,b;
char c=*ch--;
b=*--p;
a=*--p;
switch(c)
{
case '+':
*p=a+b;
break;
case '-':
*p=a-b;
break;
case '*':
*p=a*b;
break;
case '/':
*p=a/b;
break;
default:
cout<<"这个表达式的语法错误"<<endl;
}
return p;
}
...全文
42 点赞 收藏 2
写回复
2 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
ryfdizuo 2008-04-10
oo这边混的不错嘛,都四个裤衩了,
回复
oo 2008-04-10
so长的代码,有什么问题?
回复
相关推荐
发帖
数据结构与算法
创建于2007-08-27

3.2w+

社区成员

数据结构与算法相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2008-04-10 04:50
社区公告
暂无公告