日期:2014-05-17  浏览次数:20984 次

求来个高手用C#语言拆分简单的数学表达式
现在有个需求如下:把一个字符串形式的数学表达式以拆加号为原则,一级一级拆分,最终汇总为一个字符串数组。数学表达式是由"+"、"("、")"和数字组成。

示例如下:

1、字符串表达式为:1*2*3*(4+(5+6)*(7+8))+9

拆分最终的字符串数组结果为(数组元素排序没有要求):
1*2*3*4
1*2*3*5*7
1*2*3*5*8
1*2*3*6*7
1*2*3*6*8
9


2、字符串表达式为:1+2
拆分最终的字符串数组结果为(数组元素排序没有要求):
1
2

3、字符串表达式为:1*2*(3*4+5*6)
拆分最终的字符串数组结果为(数组元素排序没有要求):
1*2*3*4
1*2*5*6


拜托高手提供拆分逻辑代码。



------解决方案--------------------

public string[] Analyze(string input)
        {
            input = input.Replace(" ",string.Empty);
            Regex regclearbracket = new Regex(@"\(([^(]+?)\)");
            Regex regclearcomma = new Regex(@"([,\d\$]+\*[,\d\$]+)");

            MatchEvaluator evalclearbracket = new MatchEvaluator(RepClearBracket);
            MatchEvaluator evalclearcomma = new MatchEvaluator(RepClearComma);

            while (regclearbracket.IsMatch(input))
            {
                input = regclearbracket.Replace(input, evalclearbracket);
                while (regclearcomma.IsMatch(input))
                    input = regclearcomma.Replace(input, evalclearcomma);
            }

            return input.Replace("$","*").Replace(",","+").Split(new char[] { '+' }, StringSplitOptions.RemoveEmptyEntries);
        }

        public string RepClearBracket(Match m)
        {
            return m.Groups[1].Value.Replace("+", ",").Replace("*","$");
        }

        public string RepClearComma(Match m)
        {
            cs c = new cs(m.Groups[1].Value.Split(new char[] { '*' }, StringSplitOptions.RemoveEmptyEntries));
            return c.ToString();
        }


public class cs
    {
        public cs(string[] c)
        {
            l = c[0].Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
        &