【原创源码】C#编写一款自己的脚本语言.第八章
本帖最后由 moodlee 于 2016-3-20 00:12 编辑第八章 樱花
樱花烂漫几多时?柳绿桃红两未知。
这个时节,樱花绚烂。
——————————
(((( )))(((()))((( )))))
012 3 3 21123 4 43 2 23 4 4 3210
看到没,只要我们为“()”进行编号,一切是这么的清楚明了。
——————————
那么我们如何用代码来描述这种规律呢?
动动我们的大脑,其实很简单的。
——————————
一个小小的实例,我放在沙发~
在看之前,请自己先想想哦!
——————————
明天有一件幸福的事,去赏樱花。去看那错落有致,去看那绚烂至极。(我是真的去看哦~嘻嘻)
本帖最后由 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
————————————
其实,这个算法应该有一个判断:
判断是否存在圆括号“()”
如果存在,就使用上面的去括号计算
如果不存在,就使用第六章中的无括号计算
因为这样的递归才有效哦~
————————————
抱歉,这一章更的有点晚。
近日繁忙,脑力消耗过多。再者总想优化自己的思路,于是重写过一遍,所以更新晚了,抱歉。
附上之前章节地址:
第一章:http://www.52pojie.cn/thread-470085-1-1.html
第二章:http://www.52pojie.cn/thread-470424-1-2.html
第三章:http://www.52pojie.cn/thread-471306-1-1.html
第四章:http://www.52pojie.cn/thread-471637-1-1.html
第五章:http://www.52pojie.cn/thread-471937-1-1.html
第六章:http://www.52pojie.cn/thread-472899-1-1.html
第六章.下:http://www.52pojie.cn/thread-473861-1-1.html
第七章:http://www.52pojie.cn/thread-476054-1-1.html
感谢支持!
支持技术大神,感谢无私奉献的楼主! 感觉厉害啊,但是我看不懂。就来瞅瞅热闹 好文章,不怕晚,支持你哦
页:
[1]