private static List <Regulations> ConvertStringToRegulations(string str) { List <Regulations> list = new List <Regulations>(); while (str.Length > 1) { Regulations regulations = new Regulations(); regulations.right = new List <List <string> >(); var index = str.IndexOf("-"); regulations.left = str.Substring(0, index); str = str.Substring(index + 2); index = str.IndexOf("\n"); if (index < 0) { var tmp1 = ConvertStringToStringList(str.Substring(0), "|"); foreach (var tmp in tmp1) { regulations.right.Add(ConvertStringToStringList(tmp)); } list.Add(regulations); break; } var tmp2 = ConvertStringToStringList(str.Substring(0, index), "|"); foreach (var tmp in tmp2) { regulations.right.Add(ConvertStringToStringList(tmp)); } str = str.Substring(index + 1); list.Add(regulations); } return(list); }
// Зайти в функцию с левым значением // Проверить насколько велико уже слово // пока что не слова, как проверять? // Запоминать длину слова static List <string> CompRec(string S, int stringCount) { if (stringCount >= mMax) { return(null); } List <string> list_result = new List <string>(); Regulations regular = new Regulations(); var tmp = mRegulations.Find(t => t.left == S); regular = tmp; if (regular.right == null) { list_result.Add(S); stringCount += S.Length; return(list_result); } foreach (var regIter in regular.right) { foreach (var element in regIter) { if (mRegulations.FindIndex(t => t.left == element) > -1) { S = element; var sub_list = CompRec(S, stringCount + list_result.Last().Length); if (sub_list == null) { continue; } var tmpList = new List <string>(); if (list_result.Count == 0) { foreach (var iter in sub_list) { tmpList.Add(iter); } } else { foreach (var iter in sub_list) { tmpList.Add(list_result.Last() + iter); } list_result.Remove(list_result.Last()); } foreach (var iter in tmpList) { list_result.Add(iter); } //} else if (element.Equals(lamb)) { // Console.WriteLine("Попал на лямбду"); } else { list_result.Add(element); } } } for (int i = 0; i < list_result.Count; i++) { if (list_result[i].Length > mMax) { list_result.Remove(list_result[i]); i--; } } return(list_result); }