有如下字符串:"北京+长沙/武汉+西安/兰州+新疆"
字符是不定长的,'+'号表示中转,'/'表示或 也就是  长沙/武汉 可以在长沙中转也可以在武汉中转  
要求得到:a.北京->长沙->西安->新疆
         b.北京->长沙->兰州->新疆
         c.北京->武汉->西安->新疆
         d.北京->武汉->兰州->新疆
请大家帮忙,成份感谢.

解决方案 »

  1.   

    和计算器实现方法一样,push + pop
      

  2.   


    1、先用string.split方法,用+分开各个部分,得到
    数组1-北京
    数组2-长沙/武汉
    数组3-西安/兰州
    数组4-新疆
    2、判断第一次分组后的数据中是否有/符号,如果有就用split方法分开他们,得到
    数组1-北京
    数组2[0]-长沙,
    数组2[1]-武汉
    数组3[0]-西安
    数组3[1]-兰州
    数组4-新疆
    3、做一个循环,询的上限是所有分级素组中,个数最大的一个,例如这里是2,然后组装字符串。
      

  3.   


    首先根据 “+”号 SPLIT
    然后再根据 “/”SPLIT
    然后就自由组合啊
      

  4.   

    用slipt 我只做过简单的。。没用过多维。。
    顶顶顶顶顶
      

  5.   

    大致写了下            string way = "北京+长沙/武汉+西安/兰州+新疆";
                string[] site = way.Split('+');
                string[,] break_up  = new string[site.Length, 2];
                for (int i = 0; i < site.Length; i++)
                {
                    string[] temp = site[i].Split("/");
                    for (int j = 0; j < temp.Length; j++)
                    {
                        break_up[i, j] = temp[j];
                    }
                }
      

  6.   

    using System;
    using System.Collections.Generic;
    using System.Text;
    class test
    {
        class node
        {
            public List<string> nodeNames = new List<string>();
            public node next;
        }
        static void buildPath(List<string> pathlist, string path, node cnode)
        {
            if (cnode.next == null)
            {
                pathlist.Add(path);
                return;
            }
            foreach (var n in cnode.next.nodeNames)
            {
                buildPath(pathlist, string.Format("{0}->{1}", path, n), cnode.next);
            }
        }
        static void Main()
        {
            var srcstr = "北京+长沙/武汉+西安/兰州+新疆";
            StringBuilder sb = new StringBuilder();
            node startnode = new node();
            var curnode = startnode;
            foreach (var ch in srcstr)
            {
                if (ch != '/' && ch != '+')
                {
                    sb.Append(ch);
                    continue;
                }
                var name = sb.ToString();
                sb.Length = 0;
                curnode.nodeNames.Add(name);
                if (ch == '+')
                {
                    curnode.next = new node();
                    curnode = curnode.next;
                }
            }
            if (sb.Length > 0)
                curnode.nodeNames.Add(sb.ToString());
            List<string> pathlist = new List<string>();
            foreach (var n in startnode.nodeNames)
                buildPath(pathlist, n, startnode);
            foreach (var path in pathlist)
                Console.WriteLine(path);
            Console.ReadKey();
        }
    }
    输出:
    北京->长沙->西安->新疆
    北京->长沙->兰州->新疆
    北京->武汉->西安->新疆
    北京->武汉->兰州->新疆飘走~XD
      

  7.   


    借用ls的输出:
    输入:北京+长沙/武汉/重庆/上海+西安+新疆/乌鲁木齐/拉萨+新加坡/内蒙古+目的地
    输出:北京->长沙->西安->新疆->新加坡->目的地
    北京->长沙->西安->新疆->内蒙古->目的地
    北京->长沙->西安->乌鲁木齐->新加坡->目的地
    北京->长沙->西安->乌鲁木齐->内蒙古->目的地
    北京->长沙->西安->拉萨->新加坡->目的地
    北京->长沙->西安->拉萨->内蒙古->目的地
    北京->武汉->西安->新疆->新加坡->目的地
    北京->武汉->西安->新疆->内蒙古->目的地
    北京->武汉->西安->乌鲁木齐->新加坡->目的地
    北京->武汉->西安->乌鲁木齐->内蒙古->目的地
    北京->武汉->西安->拉萨->新加坡->目的地
    北京->武汉->西安->拉萨->内蒙古->目的地
    北京->重庆->西安->新疆->新加坡->目的地
    北京->重庆->西安->新疆->内蒙古->目的地
    北京->重庆->西安->乌鲁木齐->新加坡->目的地
    北京->重庆->西安->乌鲁木齐->内蒙古->目的地
    北京->重庆->西安->拉萨->新加坡->目的地
    北京->重庆->西安->拉萨->内蒙古->目的地
    北京->上海->西安->新疆->新加坡->目的地
    北京->上海->西安->新疆->内蒙古->目的地
    北京->上海->西安->乌鲁木齐->新加坡->目的地
    北京->上海->西安->乌鲁木齐->内蒙古->目的地
    北京->上海->西安->拉萨->新加坡->目的地
    北京->上海->西安->拉萨->内蒙古->目的地再次飘走~
      

  8.   

    呵呵..谢谢 ChrisAK 及各位..
      

  9.   

    可以实现多个发车地点与多个目的地
    private static void DisCode(String value)
            {
                List<List<String>> list = new List<List<string>>();            String[] strs = value.Split('+');            foreach (String str in strs)
                {
                    if (!String.IsNullOrEmpty(str))
                    {
                        List<String> _list = new List<string>();
                        String[] _strs = str.Split('/');
                        foreach (String _str in _strs)
                        {
                            if (!String.IsNullOrEmpty(_str))
                            {
                                _list.Add(_str);
                            }
                        }
                        list.Add(_list);
                    }
                }            List<String> resultList = new List<string>();
                foreach (List<String> _list in list)
                {
                    AddItem(_list, resultList);
                }
                foreach (String item in resultList)
                {
                    Console.WriteLine(item);
                }
            }        private static void AddItem(List<String> list, List<String> resultList)
            {
                if (resultList.Count <= 0)
                {
                    foreach (String item in list)
                    {
                        resultList.Add(item);
                    }
                }
                else
                {
                    List<String> addList = new List<string>();
                    for (int i = 0; i < resultList.Count; i++)
                    {
                        String strParent = resultList[i];
                        for (int j = 0; j < list.Count; j++)
                        {
                            if (j == 0)
                            {
                                resultList[i] = strParent + "->" + list[j];
                            }
                            else
                            {
                                addList.Add(strParent + "->" + list[j]);
                            }
                        }
                    }
                    if (addList.Count >= 1)
                    {
                        resultList.AddRange(addList);
                    }
                }
            }
    调用:
                 String strCode = "北京+长沙/武汉+西安/兰州+新疆/西藏+益阳";            DisCode(strCode);            Console.ReadKey();