| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1916 人关注过本帖
标题:新手请教?
只看楼主 加入收藏
Marlborobccn
Rank: 1
等 级:新手上路
帖 子:4
专家分:8
注 册:2015-12-6
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
新手请教?
怎样实现在执行窗口输入类似   “2+3*8=”
 然后就会执行对应的运算   
 结果  ‘ 26’
     类似计算器上的运算   
搜索更多相关主题的帖子: 计算器 
2015-12-29 09:02
wengbin
Rank: 10Rank: 10Rank: 10
来 自:陕西西安
等 级:贵宾
威 望:19
帖 子:370
专家分:1846
注 册:2015-5-8
收藏
得分:5 
这个,多半得用字符串存输入的内容,然后再把字符串中的字符提取出来成数字和算符吧,这个应该想一下应该怎么实现了,因为输入的数字很可能是整数,小数等。呃,笨办法只能是用循环判断了吧,等大神们给方法,我学习
2015-12-29 09:35
newdos
Rank: 9Rank: 9Rank: 9
等 级:禁止访问
威 望:6
帖 子:251
专家分:1169
注 册:2012-8-13
收藏
得分:5 
先乘除,后加减,用数据结构栈stack做,减可以把数取负然后压栈,遇到乘除,弹栈一个数,运算后压栈,字符串扫描完成,全部弹栈求和。楼上可以试试。
2015-12-29 12:11
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
收藏
得分:5 
要写代码太费事了。只说个思路。
先检索等号,将等号滤掉。
接下来:
检索字符串中的左右括号,将两括号中间部分保存在一个字符串中。如果有两组括号保存两个字符串。如果是括号嵌套则保存外围的字串。
将保存出的字串进行进一步分解,如果没有了括号便以加减号为分隔符分解,如果没有加减符则以乘除号为分隔符,没有分隔符则以小数点来分解。
通过递归操作,将最初的字串一层层分解下去。以返回值的方式将运算结果一层层传回调用级。最终得到最后的运算结果。
2015-12-29 13:20
Marlborobccn
Rank: 1
等 级:新手上路
帖 子:4
专家分:8
注 册:2015-12-6
收藏
得分:0 
回复 4楼 yangfrancis
麻烦写一个简单点的程序呗,谢谢
2015-12-29 16:11
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
收藏
得分:0 
写个伪代码

float SubStr(ch_origin)
{
     short length;
     length=strlen(ch_origin);
     if(ch_origin[length-1]=='=')   //判断最后一个字符是否是等号
  {
         char ch1[length-1];
         ......//将ch_origin去掉等号后的字符串赋给ch1,代码自己慢慢解决
     return SubStr(ch1);
  }
    else                            //字符串没有等号
  {
          char ch2[length-2];char ch3[length-2];char ch4[length-2]
      .........     
          //伪代码:找找是否有左括号,如果有,
           {
           //将一个初始化为0的变量track加1,
     //继续找,每遇到一个左括号,track增1,每遇到一个右括号,track减1,
          //当track归于0时,遇到的右括号与第一次遇到的左括号配对,
     //根据括号的下标找到括号中的字串,赋给ch2;
          float ch2_f;ch2_f=SubStr(ch2);
          //将ch2_f转换成字符串型,覆盖ch2;括号左右剩下的字符串分别赋给ch3,ch4,不再保留括号
          //按ch3,ch2,ch4的顺序将三个字串合为一个字符ch3;
          return Sub(ch3);
          }
          //如果没有括号
     else
          {
               if(有加号或减号)
        {
        //遇到第一个加或减的时候,将字串分割为前后两个字串分别进行递归
        //比如遇上2+3*8,将对2和3*8分别递归,各自的返回值进行相加运算。
        //返回该运算结果
        }
        else
                           //对乘除进行判断
          }
  }
  //若以上条件分支都没有被执行,说明本次调用的参数已经是一个浮点数
  //表明用户输入的只是一个数或递归调用已到了底层,直接将本字符串转成浮点数返回给调用单位
}
2015-12-29 22:24
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:5 
这个用栈吧,每遇到一个算符进行一次计算

一片落叶掉进了回忆的流年。
2015-12-30 12:57
快速回复:新手请教?
数据加载中...
 
   



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

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