解决方案 »

  1.   

    感觉要用到栈,匹配括号用递归的思想会拆分(a+b)*(c+d)其它的也能拆分了
      

  2.   


    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);
                r = c[1].Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
            }        public string[] l;        public string[] r;        public override string ToString()
            {
                List<string> yz = new List<string>();            for (int i = 0; i < l.Length; i++)
                {
                    for (int j = 0; j < r.Length; j++)
                    {
                        yz.Add(l[i] + "$" + r[j]);
                    }
                }            return string.Join(",", yz.ToArray());
            }
        }