开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 1847|回复: 6
收起左侧

[已解决] 文本格式怎么转换成算术格式

 关闭 [复制链接]
结帖率:50% (12/24)
发表于 2011-10-14 17:41:41 | 显示全部楼层 |阅读模式   江西省赣州市
20精币
文本格式怎么转换成算术格式,如:12 - 8 + 6,这样的文本,要转换成算术格式,得到结果,该怎么写呢?

最佳答案

查看完整内容

[e].版本 2 .子程序 数学_表达式计算, 文本型, 公开, 计算表达式,支持+-*/.() .参数 表达式文本, 文本型 .局部变量 表达式返回值, 双精度小数型 .局部变量 表达式代入文本, 文本型 表达式代入文本 = 表达式文本 .如果真 (校验表达式数符规范 (表达式代入文本) = 真) .如果真 (校验表达式括号规范 (表达式代入文本) = 真) .如果真 (校验表达式运算符规范 (表达式代入文本) = 真) 表达式返回值 = 计 ...

回答提醒:如果本帖被关闭无法回复,您有更好的答案帮助楼主解决,请发表至 源码区 可获得加分喔。
友情提醒:本版被采纳的主题可在 申请荣誉值 页面申请荣誉值,获得 1点 荣誉值,荣誉值可兑换荣誉会员、终身vip用户组。
快捷通道:申请荣誉值无答案申请取消悬赏投诉有答案未采纳为最佳
发表于 2011-10-14 17:41:42 | 显示全部楼层   江苏省南通市
[e].版本 2

.子程序 数学_表达式计算, 文本型, 公开, 计算表达式,支持+-*/.()
.参数 表达式文本, 文本型
.局部变量 表达式返回值, 双精度小数型
.局部变量 表达式代入文本, 文本型

表达式代入文本 = 表达式文本
.如果真 (校验表达式数符规范 (表达式代入文本) = 真)
    .如果真 (校验表达式括号规范 (表达式代入文本) = 真)
        .如果真 (校验表达式运算符规范 (表达式代入文本) = 真)
            表达式返回值 = 计算表达式 (表达式代入文本)
            返回 (到文本 (表达式返回值))
        .如果真结束

    .如果真结束

.如果真结束
返回 (“”)


.子程序 计算表达式, 双精度小数型
.参数 参_表达式文本, 文本型
.局部变量 分隔符定位, 整数型
.局部变量 左值, 双精度小数型
.局部变量 右值, 双精度小数型
.局部变量 括号内表达式求值, 双精度小数型
.局部变量 括号内表达式文本长度, 整数型
.局部变量 括号内表达式文本, 文本型
.局部变量 表达式文本修整, 文本型

.如果真 (取文本长度 (参_表达式文本) = 0)
    返回 (0)
.如果真结束
表达式文本修整 = 参_表达式文本
分隔符定位 = 寻找文本 (表达式文本修整, “(”, 1, 假)
.判断循环首 (分隔符定位 > 0)
    .判断开始 (分隔符定位 > 1)
        .如果真 (寻找文本 (“(*+-/”, 取文本中间 (表达式文本修整, 分隔符定位 - 1, 1), 1, 假) > 0)
            括号内表达式文本 = 取括号内表达式 (表达式文本修整, 分隔符定位 + 1)
            括号内表达式文本长度 = 取文本长度 (括号内表达式文本)
            括号内表达式求值 = 计算表达式 (括号内表达式文本)
            括号内表达式文本 = 到文本 (括号内表达式求值)
            .如果真 (括号内表达式文本 = “1.#INF” 或 括号内表达式文本 = “-1.#INF”)
                返回 (括号内表达式求值)
            .如果真结束
            表达式文本修整 = 取文本左边 (表达式文本修整, 分隔符定位 - 1) + 括号内表达式文本 + 取文本右边 (表达式文本修整, 取文本长度 (表达式文本修整) - (分隔符定位 + 括号内表达式文本长度 + 1))
        .如果真结束

    .默认
        括号内表达式文本 = 取括号内表达式 (表达式文本修整, 分隔符定位 + 1)
        括号内表达式文本长度 = 取文本长度 (括号内表达式文本)
        括号内表达式求值 = 计算表达式 (括号内表达式文本)
        括号内表达式文本 = 到文本 (括号内表达式求值)
        .如果真 (括号内表达式文本 = “1.#INF” 或 括号内表达式文本 = “-1.#INF”)
            返回 (括号内表达式求值)
        .如果真结束
        表达式文本修整 = 取文本左边 (表达式文本修整, 分隔符定位 - 1) + 括号内表达式文本 + 取文本右边 (表达式文本修整, 取文本长度 (表达式文本修整) - (分隔符定位 + 括号内表达式文本长度 + 1))
    .判断结束

    分隔符定位 = 寻找文本 (表达式文本修整, “(”, 分隔符定位 + 1, 假)

.判断循环尾 ()

分隔符定位 = 寻找文本 (表达式文本修整, “+”, 2, 假)
.如果真 (分隔符定位 > 0)
    左值 = 计算表达式 (取文本左边 (表达式文本修整, 分隔符定位 - 1))
    右值 = 计算表达式 (取文本右边 (表达式文本修整, 取文本长度 (表达式文本修整) - 分隔符定位))
    返回 (左值 + 右值)
.如果真结束

分隔符定位 = 寻找文本 (表达式文本修整, “-”, 2, 假)
.如果真 (分隔符定位 > 0)
    .如果真 (寻找文本 (“(*+-/”, 取文本中间 (表达式文本修整, 分隔符定位 - 1, 1), 1, 假) ≤ 0)
        左值 = 计算表达式 (取文本左边 (表达式文本修整, 分隔符定位 - 1))
        右值 = 计算表达式 (取文本右边 (表达式文本修整, 取文本长度 (表达式文本修整) - 分隔符定位))
        返回 (左值 - 右值)
    .如果真结束

.如果真结束

分隔符定位 = 寻找文本 (表达式文本修整, “*”, 1, 假)
.如果真 (分隔符定位 > 0)
    左值 = 计算表达式 (取文本左边 (表达式文本修整, 分隔符定位 - 1))
    右值 = 计算表达式 (取文本右边 (表达式文本修整, 取文本长度 (表达式文本修整) - 分隔符定位))
    返回 (左值 × 右值)
.如果真结束

分隔符定位 = 寻找文本 (表达式文本修整, “/”, 1, 假)
.如果真 (分隔符定位 > 0)
    左值 = 计算表达式 (取文本左边 (表达式文本修整, 分隔符定位 - 1))
    右值 = 计算表达式 (取文本右边 (表达式文本修整, 取文本长度 (表达式文本修整) - 分隔符定位))
    返回 (左值 ÷ 右值)
.如果真结束

分隔符定位 = 寻找文本 (表达式文本修整, “^”, 1, 假)
.如果真 (分隔符定位 > 0)
    左值 = 计算表达式 (取文本左边 (表达式文本修整, 分隔符定位 - 1))
    右值 = 计算表达式 (取文本右边 (表达式文本修整, 取文本长度 (表达式文本修整) - 分隔符定位))
    返回 (求次方 (左值, 右值))
.如果真结束

.判断开始 (取文本左边 (表达式文本修整, 1) = “-”)
    返回 (-1 × 到数值 (取文本右边 (表达式文本修整, 取文本长度 (表达式文本修整) - 1)))
.默认
    返回 (到数值 (表达式文本修整))
.判断结束


.子程序 校验表达式数符规范, 逻辑型
.参数 参_表达式文本, 文本型
.局部变量 i, 整数型
.局部变量 单个代码, 整数型

.变量循环首 (1, 取文本长度 (参_表达式文本), 1, i)
    单个代码 = 取代码 (取文本中间 (参_表达式文本, i, 1), )
    .判断开始 (单个代码 < 40 或 单个代码 > 57)  ' 代码40-47 = 字符()*+,-./  代码48-57 =  字符0-9
        返回 (假)
    .判断 (单个代码 = 44)  ' 代码44 = 字符,
        返回 (假)
    .默认

    .判断结束

.变量循环尾 ()
返回 (真)


.子程序 校验表达式运算符规范, 逻辑型
.参数 参_表达式文本, 文本型
.局部变量 i, 整数型
.局部变量 数码记录, 整数型
.局部变量 负号记录, 整数型
.局部变量 运算符记录, 整数型
.局部变量 左括号记录, 整数型
.局部变量 右括号记录, 整数型
.局部变量 文本长度, 整数型
.局部变量 单个代码, 整数型


数码记录 = 0
负号记录 = 0
运算符记录 = 0
左括号记录 = 0
右括号记录 = 0
文本长度 = 取文本长度 (参_表达式文本)
.变量循环首 (1, 文本长度, 1, i)

    单个代码 = 取代码 (取文本中间 (参_表达式文本, i, 1), )
    .判断开始 (单个代码 = 42 或 单个代码 = 43 或 单个代码 = 47)  ' *+/
        ' 校验运算符
        .如果真 (运算符记录 > 0 或 i = 1 或 i = 文本长度)
            返回 (假)
        .如果真结束
        运算符记录 = 运算符记录 + 1

    .判断 (单个代码 = 45)  ' -
        .判断开始 (i = 1 或 左括号记录 > 0)
            ' 校验负号
            .如果真 (负号记录 > 0)
                返回 (假)
            .如果真结束
            负号记录 = 负号记录 + 1
        .默认
            ' 校验运算符
            .如果真 (运算符记录 > 0 或 i = 文本长度)
                返回 (假)
            .如果真结束
            运算符记录 = 运算符记录 + 1
        .判断结束

    .判断 (单个代码 = 40)  ' (
        .判断开始 (运算符记录 = 0 且 数码记录 > 0)
            返回 (假)
        .默认
            左括号记录 = 左括号记录 + 1
        .判断结束

    .判断 (单个代码 = 41)  ' )
        .判断开始 (运算符记录 > 0)
            返回 (假)
        .默认
            右括号记录 = 右括号记录 + 1
        .判断结束

    .判断 (单个代码 ≥ 48 且 单个代码 ≤ 57)  ' 0-9
        .判断开始 (左括号记录 > 0 且 运算符记录 = 0 且 数码记录 > 0)
            返回 (假)
        .判断 (右括号记录 > 0 且 运算符记录 = 0)
            返回 (假)
        .默认
            负号记录 = 0
            运算符记录 = 0
            左括号记录 = 0
            右括号记录 = 0
        .判断结束
        数码记录 = 数码记录 + 1
    .默认

    .判断结束

.变量循环尾 ()
返回 (真)


.子程序 校验表达式括号规范, 逻辑型
.参数 参_表达式文本, 文本型
.局部变量 i, 整数型
.局部变量 括号记录, 整数型
.局部变量 单个代码, 整数型

括号记录 = 0
.变量循环首 (1, 取文本长度 (参_表达式文本), 1, i)
    单个代码 = 取代码 (取文本中间 (参_表达式文本, i, 1), )
    .判断开始 (单个代码 = 40)  ' (
        括号记录 = 括号记录 + 1
    .判断 (单个代码 = 41)  ' )
        括号记录 = 括号记录 - 1
    .默认

    .判断结束

    .如果真 (括号记录 < 0)
        跳出循环 ()
    .如果真结束

.变量循环尾 ()

.判断开始 (括号记录 = 0)
    返回 (真)
.默认
    返回 (假)
.判断结束


.子程序 取括号内表达式, 文本型
.参数 参_表达式文本, 文本型
.参数 参_左括号后首字符定位, 整数型
.局部变量 i, 整数型
.局部变量 括号记录, 整数型
.局部变量 单个代码, 整数型

' 获取()内容
括号记录 = 0
.变量循环首 (参_左括号后首字符定位, 取文本长度 (参_表达式文本), 1, i)
    单个代码 = 取代码 (取文本中间 (参_表达式文本, i, 1), )
    .判断开始 (单个代码 = 40)  ' (
        括号记录 = 括号记录 + 1
    .判断 (单个代码 = 41)  ' )
        括号记录 = 括号记录 - 1
    .默认

    .判断结束

    .如果真 (括号记录 = -1)
        跳出循环 ()
    .如果真结束

.变量循环尾 ()

返回 (取文本中间 (参_表达式文本, 参_左括号后首字符定位, i - 参_左括号后首字符定位))
[/e]

这个应该够四则运算了把
回复

使用道具 举报

结帖率:100% (24/24)
发表于 2011-10-14 17:45:39 | 显示全部楼层   山东省临沂市
本帖最后由 o1519038880 于 2011-10-14 17:46 编辑

{:3_244:}到整数(12-7+6)
回复

使用道具 举报

结帖率:100% (3/3)
发表于 2011-10-14 17:53:04 | 显示全部楼层   浙江省台州市
我懂LZ的意思,但是这个难度比较大,如果LZ是新手的话,建议按照楼上的方法
回复

使用道具 举报

结帖率:100% (4/4)

签到天数: 23 天

发表于 2011-10-14 17:54:27 | 显示全部楼层   湖南省益阳市
这个问题,有深度!!!

还有,沙发,你二了。。。不解释。。。。不是说你的回答二了,是你人品
回复

使用道具 举报

结帖率:100% (4/4)

签到天数: 23 天

发表于 2011-10-14 18:02:48 | 显示全部楼层   湖南省益阳市
一种方法用脚本。。。。
虽然这个不是我们想知道的,具体的原理。。。。
但能实现,四则运算

20111014180149.png
回复

使用道具 举报

结帖率:100% (24/24)
发表于 2011-10-14 18:09:25 | 显示全部楼层   山东省临沂市
千年 发表于 2011-10-14 17:54
这个问题,有深度!!!

还有,沙发,你二了。。。不解释。。。。不是说你的回答二了,是你人品

{:3_219:}理解错了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表