吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3024|回复: 5
收起左侧

[其他原创] 【原创源码】C#编写一款自己的脚本语言.第八章

  [复制链接]
moodlee 发表于 2016-3-19 23:59
本帖最后由 moodlee 于 2016-3-20 00:12 编辑

第八章 樱花

樱花烂漫几多时?柳绿桃红两未知。
这个时节,樱花绚烂。
——————————

(((( )))((((  )))((( )))))
0  1  2 3 3 2  1  1  2  3 4 4  3 2   2  3 4 4 3  2  1  0
看到没,只要我们为“()”进行编号,一切是这么的清楚明了。
——————————

那么我们如何用代码来描述这种规律呢?
动动我们的大脑,其实很简单的。
——————————

一个小小的实例,我放在沙发~
在看之前,请自己先想想哦!
——————————

明天有一件幸福的事,去赏樱花。去看那错落有致,去看那绚烂至极。我是真的去看哦~嘻嘻


免费评分

参与人数 1热心值 +1 收起 理由
lixinmingo + 1 感谢发布原创作品,吾爱破解论坛因你更精彩.

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| moodlee 发表于 2016-3-20 00:00
本帖最后由 moodlee 于 2016-3-20 00:09 编辑

实例对象“1+2*(3+(4-5))-(2+3)”
目的:去除括号

其实,最简单的思路就是递归。
所以,我们只要写一个把扒掉最外层的算法,然后进行递归。


首先,我们定义以下变量:
1、圆括号的编号=-1
2、当前圆括号类型=空
3、非执行代码=空
4、圆括号里内容=空

第一、二、三、四个字符依次是“1+2*”
     判断字符为非“()”
     判断【圆括号的编号】为-1
     将“1+2*”依次添加至【非执行代码】

     1=-1;
     2=空;
     3=1+2*
     4=空

第五个字符是“(”:
     判断字符为“(”
     将【圆括号的编号】自增,即0
     设置【当前圆括号类型】为“(”

     1=0;
     2=“(”;
     3=1+2*
     4=空

第六、七个字符依次是“3+”
     判断字符为非“()”
     判断【圆括号的编号】非-1
     将“3+”依次添加至【圆括号里内容】
     
     
     1=0;
     2=“(”;
     3=1+2*
     4=“3+”

第八个字符是“(”
     判断字符为“(”
     将【圆括号的编号】自增,即1
     设置【当前圆括号类型】为“(”
     判断【圆括号的编号】非0非-1
     将“(”添加至【圆括号里内容】

     1=1;
     2=“(”;
     3=1+2*
     4=“3+(”

第九、十、十一个字符依次是“4-5”
     判断字符为非“()”
     判断【圆括号的编号】非-1
     将“4-5”依次添加至【圆括号里内容】

     1=1;
     2=“(”;
     3=1+2*
     4=“3+(4-5”

第十二个字符是“)”
     判断字符为“)”
     判断【当前圆括号类型】为“(”
     设置【当前圆括号类型】为“)”
     判断【圆括号的编号】非0非-1
     将“)”添加至【圆括号里内容】

     1=1;
     2=“)”;
     3=1+2*
     4=“3+(4-5)”

第十三个字符为“)”
     判断字符为“)”
     判断【当前圆括号类型】为“)”
     将【圆括号的编号】自减,即0
     判断【圆括号的编号】为0
     递归【圆括号里内容】,返回2,将“2”添加至【非执行代码】
     ***以下为部分重置,因为已经扒掉了一最外层皮,准备重新扒皮***
     清空【圆括号里内容】
     设置【圆括号的编号】为-1
     清空【当前圆括号类型】

     1=-1;
     2=空;
     3=“1+2*2”
     4=空

第十四个字符为“-”
     判断字符为非“()”
     判断【圆括号的编号】为-1
     将“-”添加至【非执行代码】
     
     1=-1;
     2=空;
     3=“1+2*2-”
     4=空

第十五个字符为“(”
     判断字符为“(”
     将【圆括号的编号】自增,即0
     设置【当前圆括号类型】为“(”
     
     1=0;
     2=“(”;
     3=“1+2*2-”
     4=空

第十六、十七、十八个字符为“2+3”
     判断字符为非“()”
     判断【圆括号的编号】非-1
     将“2+3”依次添加至【圆括号里内容】
     
     1=0;
     2=“(”;
     3=“1+2*2-”
     4=“2+3”

第十九个字符为“)”
     判断字符为“)”
     判断【当前圆括号类型】为“(”
     设置【当前圆括号类型】为“)”
     判断【圆括号的编号】为0
     递归【圆括号里内容】,返回5,将“5”添加至【非执行代码】
     ***以下为部分重置,因为已经扒掉了一最外层皮,准备重新扒皮***
     清空【圆括号里内容】
     设置【圆括号的编号】为-1
     清空【当前圆括号类型】

     1=0;
     2=空;
     3=“1+2*2-5”
     4=空

最后,我们可以看到【非执行代码】是“1+2*2-5”,很显然,通过第六章的方法,能解出0
————————————

其实,这个算法应该有一个判断:

判断是否存在圆括号“()”

如果存在,就使用上面的去括号计算

如果不存在,就使用第六章中的无括号计算


因为这样的递归才有效哦~

————————————

抱歉,这一章更的有点晚。
近日繁忙,脑力消耗过多。再者总想优化自己的思路,于是重写过一遍,所以更新晚了,抱歉。
 楼主| moodlee 发表于 2016-3-20 00:00
啊飞 发表于 2016-3-20 00:04
cc286866604 发表于 2016-3-20 00:12
感觉厉害啊,但是我看不懂。就来瞅瞅热闹
E式丶男孩 发表于 2016-3-20 08:46
好文章,不怕晚,支持你哦
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 04:18

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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