计算器的加减乘除处理ok,按键的位图,声音制作,加载均已经ok,该括号进入表达式了,括号优先级最高,先处理,括号有两种,一种并行,比如:(1+2)+(3+4)+(5+6),另一种嵌套,比如:(3*(4+5*(6+7/(8+9))))),看到嵌套,一种熟悉的感觉油然而生,在以前,可是避之不及,首先想到的是堆栈,其次想到的是递归,傅里叶变换中已经用到(奇偶拆分序号排序),再就是findblob(找斑)的染色算法中也用到,参考后(前面章节有讲到),反复修改测试后,'('')'括号优先级处理递归算法如下:
1,假定有字符串, string str = "(3+4*(8+2))*5/(6-2*(8-4))+8*(3+2)";
2,然后调用, 括号优先级处理递归算法(ref str);
public void 括号优先级处理递归算法(ref string tempstr)
{
if (tempstr[n] == '(')
{
//截取字符串,调用自己
string subpstr = tempstr.Substring(n+1 , tempstr.Length - n-1);
string subpstr1 = tempstr.Substring(0, n )+"?";
括号优先级处理递归算法(ref subpstr);
for (int i = 0; i < subpstr.Length; i++)
{
if (subpstr[i] == ')')
{
char[] tempchar = subpstr.ToCharArray();
tempchar[i] = '?';
string char2str = "";
for (int i1 = 0; i1 < tempchar.Length; i1++)
{
char2str += tempchar[i1];
}
tempstr = subpstr1 + char2str;
i = subpstr.Length;
}
}
}
}
}
3,需要说明的是,这个递归算法从最内层的括号起,使用两个?代替(),一直到最外层括号,有了这样一个递归顺序,下一步,字符串变操作数和操作符,然后加入运算加减乘除,先消化,这一步下一节讲。
注,并行的括号处理,这个递归程序一并处理了。先是三个(((,然后处理最后一个),倒数第二个),倒数第三个),处理结束。
待续(慢慢来!...........)每天一点小改变☺
我的邮箱liuganggang_1978@163.com;734523623@qq.com