| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 443 人关注过本帖
标题:表达式求值问题
取消只看楼主 加入收藏
z6439186
Rank: 1
等 级:新手上路
帖 子:16
专家分:2
注 册:2011-11-15
结帖率:33.33%
收藏
已结贴  问题点数:10 回复次数:2 
表达式求值问题
#include <stdio.h>
#include <conio.h>
#include <malloc.h>
#include <stdlib.h>
#define error 0;
#define True  1;
#define size 100;
#define addsize 10
typedef struct
{
    char *top;
    char *base;
    int stacksize;
}sqstack;
int initstack(sqstack &s)//建立
{
    s.base=(char *)malloc(sizeof(char));
    if(!s.base)
        return error;
    s.top=s.base;
    s.stacksize=size;
}
int push(sqstack &s,char e)
{
    if(s.top-s.base>=s.stacksize)
    {
        s.base=(char *)realloc(s.base,(s.stacksize+addsize)*sizeof(char));
        if(!s.base)
            return error;
    }
    s.top=s.base+s.stacksize;
    *s.top++=e;
    s.stacksize+=addsize;
}
char pop(sqstack &s)
{
    if(s.base=s.top)
        return error;
       char m;
       m=*--s.top;
       return m;
}
char gettop(sqstack s)//为什么这不用&s啊,如果是s,那传递的是什么值呢,s是什么,难道不是栈吗?
{  char x;
    if(s.base=s.top)
        return error;
   x=*(s.top-1);//不需要改变S。TOP的值
       return x;
}
char m[6][6]=
{{'>','>','<','<','<','>','>'},{'>','>','<','<','<','>','>'},{'>''>','>','>','<','>','>'},{'>','>','>','>','<','>','>'},{'<','<','<','<','<','=',' '},{'>','>','>','>',' ','>','>'},{'<','<','<','<','<',' ','='}};//为什么这编译不行啊,说值太多了
int In(char x)
{
    switch(x)
    {
    case '+':return 1;
        case '-':return 1;
        case '*':return 1;
            case '/':return 1;
                case '(':return 1;
                    case ')':return 1;
                        case '#':return 1;
                        default:return 0;
    }
}
int sswitch(char x)
{
    int m;
    switch(x)
    {
       case '+':return 0;
        case '-':return 1;
        case '*':return 2;
            case '/':return 3;
                case '(':return 4;
                    case ')':return 5;
                        case '#':return 6;
    }
}
char pan(char x,char y)
{
  int i,j;
  i=sswitch(x);
  j=sswitch(y);
  return m[i][j];
}
int preccd(char m,char eta,char n)
{
    int i,j;
    i=atoi(&m);//为什么不是m啊,为什么药加地址符
    j=atoi(&n);
    switch(eta)
    {
    case '+':return i+j;
    case '-':return i-j;
    case '*':return i*j;
    case '/':return i/j;
    }

}
char qiuzhi()
{
    sqstack optr,opnd;//操作数,操作符
    initstack(optr);
    initstack(opnd);
    char a,b,eta,c;
    push(opnd,'#');//为什么我这用&opnd就不行呢,后面的也是一样,是什么意思呢
    c=getchar();
    while(c!='#'||gettop(opnd)!='#')
    {
        if(!In(c))
        {
            push(optr,c);
        c=getchar();
        break;
        }
        else
            switch(pan(gettop(opnd),c))
        {
            case '<':push(opnd,c);c=getchar();
            case '=':pop(opnd);c=getchar();
            case '>':a=pop(optr);
                b=pop(optr);
                eta=pop(opnd);
                push(optr,(char)preccd(a,eta,b));
        }
    }
return gettop(optr);
   
}
void main()
{
    int m;
    m=(int)qiuzhi();
    printf("%d",m);
}
希望大神告诉我下,谢谢了
搜索更多相关主题的帖子: include top return 
2012-05-14 14:47
z6439186
Rank: 1
等 级:新手上路
帖 子:16
专家分:2
注 册:2011-11-15
收藏
得分:0 
能不能说详细点啊,按我问的问题
2012-05-15 12:41
z6439186
Rank: 1
等 级:新手上路
帖 子:16
专家分:2
注 册:2011-11-15
收藏
得分:0 
能告诉我其他问题吗?谢谢了,那个没看到
2012-05-20 14:31
快速回复:表达式求值问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017456 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved