标题:表达式求值问题(C语言数据结构栈实现)
只看楼主
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
结帖率:100%
已结贴  问题点数:50 回复次数:15 
表达式求值问题(C语言数据结构栈实现)
在做这个程序时候遇到了一个问题,就是对于一个表达式怎么实现一次性输入要求的表达式,在输入完成后就直接输出正确结果,而不是一个字符一个字符的输入判断到底是不是运算符还是操作数,还有在一次行输入的时候定义怎样的数据类型能够输入成为大于字符‘9’的数字的,我刚开始定义的是char型,但是对于比如说输入24,验证结果则只是把2赋给了char型变量,怎么实现输入大于‘9’的操作数呢?以上是我写这个程序遇到的问题,想了很久,没解决,希望哪位给个好的思路,谢谢
搜索更多相关主题的帖子: 数据结构 C语言 求值 表达 
2010-11-18 20:47
放屁的可乐
Rank: 1
等 级:新手上路
帖 子:1
专家分:3
注 册:2010-11-18
得分:3 
LZ我不会,但我晓得这个有多么的挑战性
2010-11-18 21:52
清风拂晓
Rank: 8Rank: 8
来 自:火星
等 级:蝙蝠侠
威 望:1
帖 子:356
专家分:889
注 册:2010-8-13
得分:10 
可以先判断那个数字的旁边的2个是不是操作符 如果是这个数就是个个位数 如果不是继续找下一个 知道找到的是操作符就把整个数字放在数组中  上次编过类似的的简单计算的 有空发个我写过的给你参考参考

清风拂暮(木)
2010-11-19 07:35
御坂美琴
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:魔術の禁書目錄
等 级:小飞侠
威 望:9
帖 子:952
专家分:2929
注 册:2010-8-18
得分:10 
楼主看编译原理吧,这些其实都是相当于输入一个字符串(gets/getline),然后你从字符串分析出哪里是数字,哪里是运算符,然后再开始计算
特别地,如果是浮点数1.2e-3这种形式,如果你打算支持浮点数的话,也是要考虑的

永远为正义而奋斗,锄强扶弱的Level 5 超能力者
とある魔術の禁書目錄インデックス__御み坂さか美み琴こと
http://bbs.bccn.net/space.php?action=threads&uid=483997
2010-11-19 08:33
wujieru
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:1
帖 子:1108
专家分:1939
注 册:2010-10-9
得分:10 
怎么实现输入大于‘9’的操作数呢?
二位数组吧
2010-11-19 09:39
outsider_scu
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:3
帖 子:430
专家分:1333
注 册:2010-10-21
得分:10 
把表达示定义一字符串进行输入。然后用两个栈,一个保存操作数,一个保存运算符,你懂的。。
至于从字符串中读入大于9的数。我这里有一个参考。。
程序代码:
/*输入一个字符串,内有数字和非数字字符,将其中连续的数字作为一个整体,一次存放到
数组a中,编程统计有多少个整数,并输出这些数*/
#include<stdio.h>
#include<string.h>
int Isdigit(char c)
{
    if(c>='0'&&c<='9') return 1;
    else return 0;
}
int CountInt(char *s,int a[])
{
    int i,j,num;
    i=0,j=0;
    while(s[i])
    {
        if(Isdigit(s[i]))
        {
            num=0;
            while(Isdigit(s[i]))
            {
                num=num*10+s[i]-'0';
                i++;
            }
            a[j]=num;
            j++;
        }
        else i++;
    }
    return j;
}
int main()
{
    int i,n;
    int a[80];
    char s[80];
    scanf("%s",s);
    n=CountInt(s,a);
    printf("there is %d int!\n",n);
    for(i=0;i<n;i++)
    printf("%d\t",a[i]);
    printf("\n");
}    

 

编程的道路上何其孤独!
2010-11-19 10:25
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
得分:0 
以下是引用御坂美琴在2010-11-19 08:33:47的发言:

楼主看编译原理吧,这些其实都是相当于输入一个字符串(gets/getline),然后你从字符串分析出哪里是数字,哪里是运算符,然后再开始计算
特别地,如果是浮点数1.2e-3这种形式,如果你打算支持浮点数的话,也是要考虑的

谢谢你,编译原理我们还没学呢~,但是具体怎么一次输入就可以扫描完成呢?,我不知道用什么方法,便输入编调用判断函数好像行不通
2010-11-19 11:34
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
得分:0 
厚着脸皮自己顶起来
2010-11-19 23:11
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
得分:3 
以下是引用遮天云在2010-11-19 23:11:00的发言:

厚着脸皮自己顶起来
顶起来啊,

我就是真命天子,顺我者生,逆我者死!
2010-11-20 10:18
天下人
Rank: 1
等 级:新手上路
帖 子:7
专家分:8
注 册:2010-11-16
得分:4 
再加一条判断语句,如果一个数字后还是数字,就把上一个弹出乘10加上刚判断的值,再压进去
2010-11-20 10:26



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-326169-1-1.html




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

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