Составить список всех фраз из имеющихся слов в файле - C#
Формулировка задачи:
Всем доброго времени суток! В общем, у меня имеется программа, реализованная через рекурсию, которая составляет список всех фраз из имеющихся слов в файле. Причем так, чтобы эти фразы были анаграммой изначально данной фразы. Хотелось бы вывести все полученные словосочетания в текстовый файл. Но вот в чем заключается проблема: программа напрочь отказывается выполняться дальше этого момента: "AddWord(result)". То есть, когда она доходит до этого момента, ничего не происходит (ну или я не понимаю, что происходит). Она продолжает выполняться и выполняться. Она не доходит до конца, и текстовый файл не создается. Никакой ошибки компилятор не выдает. Исключений тоже нет никаких. Не могу никак понять, что я не так делаю. Буду премного благодарен за любую помощь.
А вот вызов этой функции в мэйне
public static string[] words = File.ReadAllLines(@"J:\AllFWordsV1.txt"); public static List<string> Phrases = new List<string>(); public static int letcount; public static void AddWord(string word) { if (word.Length > 20) return; char[] A = "poultry outwits ants".ToCharArray(); A = A.Where(item => item != ' ').ToArray(); words = words.Where(item => item != " ").ToArray(); int n = A.GetLength(0); char[] B = new char[n]; foreach (var item in words) { if (item != " ") { string result = word + item; letcount = 0; for (int h = 0; h < n; h++) { B[h] = A[h]; } foreach (char letter in result) { for (int i = 0; i < n; i++) { if (B[i] == letter) { B[i] = ' '; letcount++; break; } } } if ((result.Length < 20) && (result.Length == letcount)) { Phrases.Add(result); AddWord(result); } } else break; } }
foreach (var word in words) { AddWord(word); } File.WriteAllLines(@"J:\AllPhrasesV11.txt", Phrases.ToArray()); Console.WriteLine("\a\aAll Done"); //Оповещение об окончании работы программы
Решение задачи: «Составить список всех фраз из имеющихся слов в файле»
textual
Листинг программы
class Program { static void Main(string[] args) { List<string> list = new List<string>(); string[] words = File.ReadAllLines(@"J:\AllFWordsV1.txt"); string per = ""; for (int i = 0; i < words.Length; i++) { per += i.ToString(); } foreach (var s in GetPermutations(per).ToArray()) { string temp = String.Empty; foreach (char i in s) temp += words[Convert.ToInt32(i.ToString())] + ' '; list.Add(temp); } File.WriteAllLines(@"J:\AllPhrasesV11.txt", list); Console.ReadKey(); } public static IEnumerable<string> GetPermutations(string s) { if (s.Length > 1) return from ch in s from permutation in GetPermutations(s.Remove(s.IndexOf(ch), 1)) select string.Format("{0}{1}", ch, permutation); else return new string[] { s }; } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д