有如下字符串:"北京+长沙/武汉+西安/兰州+新疆"
字符是不定长的,'+'号表示中转,'/'表示或 也就是 长沙/武汉 可以在长沙中转也可以在武汉中转
要求得到:a.北京->长沙->西安->新疆
b.北京->长沙->兰州->新疆
c.北京->武汉->西安->新疆
d.北京->武汉->兰州->新疆
请大家帮忙,成份感谢.
字符是不定长的,'+'号表示中转,'/'表示或 也就是 长沙/武汉 可以在长沙中转也可以在武汉中转
要求得到:a.北京->长沙->西安->新疆
b.北京->长沙->兰州->新疆
c.北京->武汉->西安->新疆
d.北京->武汉->兰州->新疆
请大家帮忙,成份感谢.
1、先用string.split方法,用+分开各个部分,得到
数组1-北京
数组2-长沙/武汉
数组3-西安/兰州
数组4-新疆
2、判断第一次分组后的数据中是否有/符号,如果有就用split方法分开他们,得到
数组1-北京
数组2[0]-长沙,
数组2[1]-武汉
数组3[0]-西安
数组3[1]-兰州
数组4-新疆
3、做一个循环,询的上限是所有分级素组中,个数最大的一个,例如这里是2,然后组装字符串。
首先根据 “+”号 SPLIT
然后再根据 “/”SPLIT
然后就自由组合啊
顶顶顶顶顶
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];
}
}
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
借用ls的输出:
输入:北京+长沙/武汉/重庆/上海+西安+新疆/乌鲁木齐/拉萨+新加坡/内蒙古+目的地
输出:北京->长沙->西安->新疆->新加坡->目的地
北京->长沙->西安->新疆->内蒙古->目的地
北京->长沙->西安->乌鲁木齐->新加坡->目的地
北京->长沙->西安->乌鲁木齐->内蒙古->目的地
北京->长沙->西安->拉萨->新加坡->目的地
北京->长沙->西安->拉萨->内蒙古->目的地
北京->武汉->西安->新疆->新加坡->目的地
北京->武汉->西安->新疆->内蒙古->目的地
北京->武汉->西安->乌鲁木齐->新加坡->目的地
北京->武汉->西安->乌鲁木齐->内蒙古->目的地
北京->武汉->西安->拉萨->新加坡->目的地
北京->武汉->西安->拉萨->内蒙古->目的地
北京->重庆->西安->新疆->新加坡->目的地
北京->重庆->西安->新疆->内蒙古->目的地
北京->重庆->西安->乌鲁木齐->新加坡->目的地
北京->重庆->西安->乌鲁木齐->内蒙古->目的地
北京->重庆->西安->拉萨->新加坡->目的地
北京->重庆->西安->拉萨->内蒙古->目的地
北京->上海->西安->新疆->新加坡->目的地
北京->上海->西安->新疆->内蒙古->目的地
北京->上海->西安->乌鲁木齐->新加坡->目的地
北京->上海->西安->乌鲁木齐->内蒙古->目的地
北京->上海->西安->拉萨->新加坡->目的地
北京->上海->西安->拉萨->内蒙古->目的地再次飘走~
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();