Составить список всех фраз из имеющихся слов в файле - 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 };
    } 
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.571 из 5
Похожие ответы