Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.83
nightmare1287
0 / 0 / 1
Регистрация: 22.07.2013
Сообщений: 30
#1

Создать консольное приложение в шарпе "Слова из слова" - C#

23.07.2013, 11:37. Просмотров 1709. Ответов 13
Метки нет (Все метки)

Необходимо из букв заданного слова составить всевозможные слова. PS/ буква используется только один раз
http://www.cyberforum.ru/csharp-beginners/thread1587954.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.07.2013, 11:37
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Создать консольное приложение в шарпе "Слова из слова" (C#):

Составить программу которая получает из слова "КЛОУН" слово "УКЛОН" и "КУЛОН"
Составить программу которая получает из слова «КЛОУН» слово «УКЛОН» и «КУЛОН».

Игра "В слова": называть слово, начинающееся на последнюю букву слова названного соперником
Разработать программу, позволяющую игроку выбрать тему игры (например, города,...

Написать фразу "Мы отъехали k километров от дома", согласовав окончание слова "километр" с числом k.
Добрый день,форумчане! Помогите написать задачу на С# Для целого числа k...

Напечатать фразу "мы нашли К грибов в лесу", согласовав окончание слова "гриб" с числом К
Для натурального числа К напечатать фразу "мы нашли К грибов в лесу",...

В предварительно созданном текстовом файле заменить все вхождения слова "кот" словом "пес"
Помогите=)В предварительно созданном текстовом файле заменить все вхождения...

13
AlexBoyko
2 / 2 / 0
Регистрация: 22.07.2013
Сообщений: 8
23.07.2013, 11:54 #2
Классическая задача на анаграммы, для того чтобы это работало нужно составить словарь, потом каждому слову поставить в соответствие строку с упорядоченными по алфавиту буквами этого слова, слова у которых упорядоченные строки совпали и есть анаграммы, нужно только их вывести. Примеров в нете можно нагуглить. Пишите "анаграммы на С#" в поиске
0
Alex9
Компьютерщик
127 / 138 / 44
Регистрация: 25.04.2012
Сообщений: 2,229
23.07.2013, 14:16 #3
Чтобы получить все n-граммы, используй код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
using System;
using System.Collections.Generic;
 
namespace помощь1
{
    class Program
    {
      
        static void Main()
        {
            string wrd = "wrdiswrd";//тут точно слово
            List<string> ngramms = new List<string>();
       
            for (int i = 0; i < wrd.Length; i++)
            {
                for (int j = wrd.Length - i; j > 0; j--)
                {
                    var s=wrd.Substring(i, j);
                    Console.WriteLine(s);
                    if (!ngramms.Contains(s)) 
                      ngramms.Add(s);
                }
            }
            
            
            Console.ReadKey();
        }
    }
}
1
nightmare1287
0 / 0 / 1
Регистрация: 22.07.2013
Сообщений: 30
23.07.2013, 14:32  [ТС] #4
а как сделать чтобы слова были адекватными?
нужен словарь?
0
Alex9
Компьютерщик
127 / 138 / 44
Регистрация: 25.04.2012
Сообщений: 2,229
23.07.2013, 15:34 #5
Да, без словаря адекватных слов не получить. Вы можете искать значения из словаря в строке, используя шаблон.

Добавлено через 2 минуты
Предыдущий код находит все возможные подстроки в заданном слове. Если нужно разбирать слово на буквы, то нужно задать алфавит слова.

Добавлено через 18 минут
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
using System.Text.RegularExpressions;
....
List<char> AlphabetRusLower = new List<char> { 'а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я' };
string wrd=@"словотест";
List<char>unique=new List<char>();
foreach(var chr in wrd)
if(!unique.Contains(chr)&&AlphabetRusLower.Contains(chr))
    unique.Add(chr);//создаем буфер неповторяющихся букв слова
string flagsNumber = String.Empty;
string flagsNumberFinal=String.Empty;
for(int i=0;i<unique.Count;i++)
{
flagsNumber+="0";
flagsNumberFinal+="1";
}
var temp1=unique.ToArray();
var table=new Dictionary<string,string>();
 do
            {
                flagsNumber = IncreaseBinaryNumber(flagsNumber);
string s=String.Empty;
for(int i=0;i<flagsNumber.Length;i++)
if(x=='1')
s+=temp1[i].ToString();
if(s!=String.Empty)
table.Add(flagsNumber,s);//заносим в таблицу слов
 }
            while (flagsNumber != flagsNumberFinal);
string[] result=table.Values.ToArray();//тут все возможные слова из неповторяющихся букв исходного слова
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public static string IncreaseBinaryNumber(string binNum)
        {
            var result = binNum;
 
            char[] num = result.ToCharArray();
            int i = num.Length - 1;
            while (num[i] != '0')
            {
                i--;
                if (i < 0) break;
            }
            if (num[i] == '0')
            {
                num[i] = '1';
                for (int j = i+1; j < num.Length; j++)
                    num[j] = '0';
            }
            result = new string(num);
 
            return result;
        }

Попробуйте так.
1
nightmare1287
0 / 0 / 1
Регистрация: 22.07.2013
Сообщений: 30
23.07.2013, 17:07  [ТС] #6
Большое тебе консольное спасибо
0
Alex9
Компьютерщик
127 / 138 / 44
Регистрация: 25.04.2012
Сообщений: 2,229
23.07.2013, 19:33 #7
C#
1
if(x=='1')
тут должно быть
C#
1
if(temp1[i]=='1')
1
Alex9
Компьютерщик
127 / 138 / 44
Регистрация: 25.04.2012
Сообщений: 2,229
25.07.2013, 17:25 #8
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
 
namespace помощь1
{
    
    class Program
    {
        public static string IncreaseBinaryNumber(string binNum)
        {
            var result = binNum;
 
            char[] num = result.ToCharArray();
            int i = num.Length - 1;
            while (num[i] != '0')
            {
                i--;
                if (i < 0) break;
            }
            if (num[i] == '0')
            {
                num[i] = '1';
                for (int j = i + 1; j < num.Length; j++)
                    num[j] = '0';
            }
            result = new string(num);
 
            return result;
        }
        static void Main()
        {
            
 
List<char> AlphabetRusLower = new List<char> { 'а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я' };
string wrd=@"словотест";
List<char>unique=new List<char>();
foreach(var chr in wrd)
if(!unique.Contains(chr)&&AlphabetRusLower.Contains(chr))
    unique.Add(chr);//создаем буфер неповторяющихся букв слова
string flagsNumber = String.Empty;
string flagsNumberFinal=String.Empty;
for(int i=0;i<unique.Count;i++)
{
flagsNumber+="0";
flagsNumberFinal+="1";
}
var temp1=unique.ToArray();
var table=new Dictionary<string,string>();
 do
            {
                flagsNumber = IncreaseBinaryNumber(flagsNumber);
string s=String.Empty;
for(int i=0;i<flagsNumber.Length;i++)
if(flagsNumber[i]=='1')
s+=temp1[i].ToString();
if(s!=String.Empty)
table.Add(flagsNumber,s);//заносим в таблицу слов
 }
            while (flagsNumber != flagsNumberFinal);
 string[] result = new string[table.Count];
table.Values.CopyTo(result,0);
            
            Console.ReadKey();
        }
    }
}
В предыдущем листинге неправильно сослался на переменную, т.к. код не запускал.
1
nightmare1287
0 / 0 / 1
Регистрация: 22.07.2013
Сообщений: 30
26.07.2013, 13:49  [ТС] #9
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
using System;
using System.IO;
using System.Linq;
 
namespace TWords
{
    class Program
    {
        
 
         static void Main() 
         {
            
            var result = new string[] {};
            Console.Write("Введите слово: ");
            string word = Console.ReadLine();
            char[] arrWordChar = StringToCharArray(word); // user_word in char[]
            string[] line = File.ReadAllLines(@"vocabulary.txt"); //считали все строки словаря
            int countWords = 0;
             
             for (int i = 0; i <= 47611; i++) 
            {
                char[] arrWordCharFileLine = StringToCharArray(line[i]); // преобразуем текущую строку в char[]
                
                 char[] intersectedArr = arrWordCharFileLine.Intersect(arrWordChar).ToArray(); // находим зону пересечения массивов без учета дублирования элементов
                 char[] duplicationLetters = arrWordCharFileLine.Distinct().ToArray(); // вычисляем кол-во уникальных эл-тов в оригинальном слове
                 if (intersectedArr.Length + arrWordCharFileLine.Length - duplicationLetters.Length == arrWordCharFileLine.Length) 
                
                { //проверяем полное пересечение массивов
                    countWords++;
                    Array.Resize(ref result, countWords+1);
                    result[countWords] = line[i];
                }
            }
            foreach (var t in result)
            {
                Console.WriteLine(t);
            }
             Console.WriteLine("Всего найдено слов :" + countWords);
             Console.ReadLine();
 
        }
         
        public static char[] StringToCharArray(string word)
         {  // string to char[]
             var arrWordChar = new char[word.Length];
             for (var i = 0; i < word.Length; i++)
             {
                 arrWordChar[i] = word[i];
             }
             return arrWordChar;
         } 
 
    }
}
Нужно зделать так, чтобы буквы не повторялись... т.е. буква из слова используется только один раз
0
Alex9
Компьютерщик
127 / 138 / 44
Регистрация: 25.04.2012
Сообщений: 2,229
26.07.2013, 14:00 #10
Тебе не нужно создавать свой метод преобразования string в char[]. Используй:
C#
1
2
string s="example";
char[] charArray = s.ToCharArray();
Добавлено через 2 минуты
Прикрепи к сообщению файл словаря, чтобы можно было запустить код.
1
nightmare1287
0 / 0 / 1
Регистрация: 22.07.2013
Сообщений: 30
26.07.2013, 14:27  [ТС] #11
Цитата Сообщение от Alex9 Посмотреть сообщение
Тебе не нужно создавать свой метод преобразования string в char[]. Используй:
C#
1
2
string s="example";
char[] charArray = s.ToCharArray();
Добавлено через 2 минуты
Прикрепи к сообщению файл словаря, чтобы можно было запустить код.
вот файл словаря
0
Вложения
Тип файла: rar vocabulary.rar (177.8 Кб, 6 просмотров)
nightmare1287
0 / 0 / 1
Регистрация: 22.07.2013
Сообщений: 30
26.07.2013, 14:40  [ТС] #12
Цитата Сообщение от Alex9 Посмотреть сообщение
Тебе не нужно создавать свой метод преобразования string в char[]. Используй:
C#
1
2
string s="example";
char[] charArray = s.ToCharArray();
Добавлено через 2 минуты
Прикрепи к сообщению файл словаря, чтобы можно было запустить код.
Вот словарь
0
nightmare1287
0 / 0 / 1
Регистрация: 22.07.2013
Сообщений: 30
26.07.2013, 14:53  [ТС] #13
Вся прога в архиве
0
Вложения
Тип файла: rar Word from hell.rar (394.3 Кб, 20 просмотров)
Alex9
Компьютерщик
127 / 138 / 44
Регистрация: 25.04.2012
Сообщений: 2,229
26.07.2013, 16:26 #14
Вроде твоя программа работает как ты написал в условии задачи. Я ввожу "аббат" и выводится 5 слов словаря.
0
26.07.2013, 16:26
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.07.2013, 16:26
Привет! Вот еще темы с решениями:

Построить циклическое консольное приложение "Целочисленные типы"
Всем привет. Прошу помочь решить задачу. Построить циклическое консольное...

Построить циклическое консольное приложение "Целочисленные типы"
1)Построить консольное приложение, в котором вводятся номера телефонов...

Построить циклическое консольное меню-приложение "Операции отношения и сдвига"
Ребят, помогите пожалуйста, времени не хватает на всё... помогите задание...

Разработать консольное приложение "Калькулятор" для выполнения 4-х арифметических действий
Помогите пожалуйста с двумя прогами: 1. Разработать консольное приложение...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru