写给父亲的语音计算器('('')'括号优先级处理递归算法c#,一)

计算器的加减乘除处理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,需要说明的是,这个递归算法从最内层的括号起,使用两个?代替(),一直到最外层括号,有了这样一个递归顺序,下一步,字符串变操作数和操作符,然后加入运算加减乘除,先消化,这一步下一节讲。

注,并行的括号处理,这个递归程序一并处理了。先是三个(((,然后处理最后一个),倒数第二个),倒数第三个),处理结束。

待续(慢慢来!...........)每天一点小改变☺

我的邮箱[email protected];[email protected]

发布了66 篇原创文章 · 获赞 12 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/ganggangwawa/article/details/102729075