6 / 6 / 0
Регистрация: 20.03.2011
Сообщений: 67
1

Найти слово в файле, в котором больше всего гласных

04.12.2011, 16:31. Показов 3662. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В текстовом файле дан какой-либо текст, найти слово, в котором больше всего гласных и определить, сколько раз оно встретилось в тексте.Результат вывести в новый текстовый файл.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.12.2011, 16:31
Ответы с готовыми решениями:

Найти в текстовом файле слово, доля гласных в котором максимальна
Помогите написать программу: Найти в текстовом файле слово, доля гласных в котором максимальна.

Найти и напечатать слово, в котором содержится больше всего символов “А”
Дан текст, который содержит буквы и пропуски. Найти и напечатать слово, в котором содержится больше...

Найти и напечатать слово, в котором содержится больше всего символов “А”
Дан текст, который содержит буквы и пропуски. Найти и напечатать слово, в котором содержится больше...

Найти и напечатать слово, в котором содержится больше всего заданного символа
Всем привет! Дан текст, который содержит буквы и пропуски. Найти и напечатать слово, в котором...

9
162 / 158 / 19
Регистрация: 22.11.2011
Сообщений: 371
04.12.2011, 16:36 2
Вам циклами или Linq'ом в две строки?
0
6 / 6 / 0
Регистрация: 20.03.2011
Сообщений: 67
05.12.2011, 16:38  [ТС] 3
лучше циклами, пожалуйста)

Добавлено через 23 часа 58 минут
SpawnDDR куда-то пропал, помогите, пожалуйста, кто ещё знает реализацию данной программы!
0
29 / 30 / 3
Регистрация: 26.07.2010
Сообщений: 297
05.12.2011, 19:18 4
Попробуй так, вроде работает
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
using System;
using System.IO;
 
 
    class Program
    {
        static void Main(string[] args)
        {
            HardWork hd = new HardWork("text.txt"); //Тут путь к файлу
            Console.WriteLine(hd.GetAnswer());
            Console.ReadKey();
        }
    }
    class HardWork
    {
        private StreamReader sr;
        private string str;
        private int max = 0;
        private int kolvo = 0;
        private string slovo;
        private char[] bukvi = new[] { 'а', 'я', 'о', 'ё', 'ы', 'и', 'э', 'е', 'у', 'ю' };
        public HardWork(string path)
        {
            sr = new StreamReader(path);
        }
        public string GetAnswer()
        {
            string[] words;
            str = sr.ReadToEnd();
            words = str.Split(' ');
            slovo = words[0];
            foreach (string word in words)
            {
                foreach (char t in word)
                {
                    foreach (char c in bukvi)
                    {
                        if (t == c) kolvo++;
                    }
                }
                if (max < kolvo)
                {
                    max = kolvo;
                    slovo = word;
                }
                kolvo = 0;
            }
            foreach (string word in words)
            {
                if (slovo == word) kolvo++;
            }
            return "Слово " + slovo + " встречается " + kolvo + " раз";
        }
    }
1
6 / 6 / 0
Регистрация: 20.03.2011
Сообщений: 67
05.12.2011, 19:38  [ТС] 5
спасибо, работает, но только если слово встречается более двух раз, то ответ пишет не правильный
0
29 / 30 / 3
Регистрация: 26.07.2010
Сообщений: 297
05.12.2011, 19:52 6
попробуйте так
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
using System;
using System.IO;
 
 
class Program
{
    static void Main(string[] args)
    {
        HardWork hd = new HardWork("text.txt"); //Тут путь к файлу
        Console.WriteLine(hd.GetAnswer());
        Console.ReadKey();
    }
}
class HardWork
{
    private StreamReader sr;
    private string str;
    private int max = 0;
    private int kolvo = 0;
    private string slovo;
    private char[] bukvi = new[] { 'а', 'я', 'о', 'ё', 'ы', 'и', 'э', 'е', 'у', 'ю' };
    public HardWork(string path)
    {
        sr = new StreamReader(path);
    }
    public string GetAnswer()
    {
        string[] words;
        str = sr.ReadToEnd();
        words = str.Split(' ');
        slovo = words[0];
        foreach (string word in words)
        {
            foreach (char t in word)
            {
                foreach (char c in bukvi)
                {
                    if (t == c) kolvo++;
                }
            }
            if (max < kolvo)
            {
                max = kolvo;
                slovo = word;
            }
            kolvo = 0;
        }
        foreach (string word in words)
        {
            if (slovo.ToLower() == word.ToLower()) kolvo++;
        }
        return "Слово " + slovo + " встречается " + kolvo + " раз";
    }
}
мой текст - Кроме того дополнительные гласные могут дополнительные иметь артикуляции например носовую и фонации полнительные b дополнительные
ответ - Слово дополнительные встречается 3 раз
1
6 / 6 / 0
Регистрация: 20.03.2011
Сообщений: 67
05.12.2011, 20:02  [ТС] 7
Всё работает. Спасибо большое!!! Теперь буду разбираться)
0
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
05.12.2011, 20:21 8
Надеюсь хотя бы поглядишь, а то зря время потратил. Да вот люблю я заморочи. Просто всё в Main писать, как-то не гуд мне кажется.

Program.cs
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
68
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
 
namespace ConsApp_FilesAndWords
{
    class Program
    {
        const string TxtOriginalFileName = "Original.txt";
        const string TxtNewFileName = "New.txt";
 
        static char[] vowel = { 'а', 'е', 'ё', 'и', 'о', 'у', 'ы', 'э', 'ю', 'я' };
        static char[] consonant = { 'б', 'в', 'г', 'д', 'ж', 'з', 'й', 'к', 'л', 'м', 'н',
                                    'п', 'р', 'с', 'т', 'ф', 'х' , 'ц' , 'ш' , 'щ' , 'ъ' , 'ь' };
 
        static void Main(string[] args)
        {
            Console.BackgroundColor = ConsoleColor.Gray;
            Console.ForegroundColor = ConsoleColor.Yellow;
            Console.Clear();
            //В текстовом файле дан какой-либо текст, найти слово, в котором больше всего гласных и определить,
            //сколько раз оно встретилось в тексте. Результат вывести в новый текстовый файл. 
            string pathToOriginalFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, TxtOriginalFileName);
            string pathToNewFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, TxtNewFileName);
 
            string text = null;
            if (File.Exists(pathToOriginalFile))
            {
                text = File.ReadAllText(pathToOriginalFile, Encoding.Default);
            }
            else
            {
                WriteLine(string.Format("Файл: \"{0}\" небыл найден", TxtOriginalFileName), ConsoleColor.DarkRed);
                Console.ReadKey();
                return;
            }
 
            string[] words = text.Split(new char[] { ' ', '\r', '\n', '!', '.', ',', ':', ';', '-', '\"' }, StringSplitOptions.RemoveEmptyEntries);
 
            WordParser wordParser = new WordParser();
            List<WordInfo> listOfUniqueWords = wordParser.GetUniqueWords(words, true);
            int counterOfVowelCharacters;
            WordInfo wordInfoMaxChars = wordParser.GetWordInfoWithMaxNumberOfSpecifiedChars(listOfUniqueWords, vowel, out counterOfVowelCharacters);
 
            string resultText = string.Format("Слово: \"{0}\" встречается {1} раз и содержит {2} гласных символов\n",
                wordInfoMaxChars.Word, wordInfoMaxChars.Count, counterOfVowelCharacters);
 
            WriteLine(resultText, ConsoleColor.DarkMagenta);
            //Пишем в файл
            using (StreamWriter streamWriter = File.CreateText(pathToNewFile))
            {
                streamWriter.Write(resultText);
            }
            Console.WriteLine("Результат сохранён в файл: {0}", pathToNewFile);
 
            Console.ReadKey();
        }
 
        public static void WriteLine(string text, ConsoleColor color)
        {
            ConsoleColor previousColor = Console.ForegroundColor;
            Console.ForegroundColor = color;
            Console.WriteLine(text);
            Console.ForegroundColor = previousColor;
        }
    }
}


WordInfo.cs
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
namespace ConsApp_FilesAndWords
{
    public class WordInfo
    {
        string word;
        int count;
 
        public WordInfo(string word)
        {
            this.word = word;
            this.count = 1;
        }
 
        public void PlusOneWord()
        {
            count++;
        }
 
        public string Word { get { return word; } }
        public int Count { get { return count; } }
    }
}


WordParser.cs
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
using System;
using System.Collections.Generic;
 
namespace ConsApp_FilesAndWords
{
    public class WordParser
    {
        public WordParser()
        {
        }
 
        /// <summary>
        /// Возвращает true, если переданный символ совпадает с одним из символов в передаваемом в метод массиве
        /// </summary>
        /// <param name="ch">Символ, который нужно проверить</param>
        /// <param name="characters">Массив символов для поиска</param>
        /// <returns></returns>
        public bool Contains(char ch, char[] characters)
        {
            return FindInArray(characters, ch);
        }
 
        /// <summary>
        /// Получить уникальные слова
        /// </summary>
        /// <param name="words">Массив слов</param>
        /// <param name="ignoreCase">Игнорировать регистр</param>
        public List<WordInfo> GetUniqueWords(string[] words, bool ignoreCase)
        {
            List<WordInfo> listOfWords = new List<WordInfo>();
            WordInfo inList = null;
 
            for (int i = 0; i < words.Length; i++)
            {
                string word = null;
                if (ignoreCase)
                    word = words[i].ToLowerInvariant();
                else
                    word = words[i];
                
                inList = listOfWords.Find(new Predicate<WordInfo>(
                    delegate(WordInfo wordInfo)
                    {
                        return wordInfo.Word == word;
                    }));
 
                if (inList == null)
                    listOfWords.Add(new WordInfo(word));
                else
                    inList.PlusOneWord();
            }
            return listOfWords;
        }
 
        /// <summary>
        /// Получить слово с максимальным кол-вом указанных символов
        /// </summary>
        /// <param name="uniqueWords"></param>
        /// <param name="characters"></param>
        /// <param name="counterOfSpecifiedCharacters"></param>
        /// <returns></returns>
        public WordInfo GetWordInfoWithMaxNumberOfSpecifiedChars(List<WordInfo> uniqueWords, char[] characters, out int counterOfSpecifiedCharacters)
        {
            counterOfSpecifiedCharacters = 0;
            WordInfo wordInfoMaxChars = null;
 
            foreach (WordInfo wordInfo in uniqueWords)
            {
                int counter = 0;
                for (int i = 0; i < wordInfo.Word.Length; i++)
                {
                    if (FindInArray(characters, wordInfo.Word[i]))
                        counter++;
                }
                if (counter > counterOfSpecifiedCharacters)
                {
                    counterOfSpecifiedCharacters = counter;
                    wordInfoMaxChars = wordInfo;
                }
            }
            return wordInfoMaxChars;
        }
 
        private bool FindInArray(char[] array, char ch)
        {
            for (int i = 0; i < array.Length; i++)
                if (ch == array[i])
                    return true;
            return false;
        }
    }
}


Вообще нормально хоть (для тех кто шарит получше меня)? Ответьте кто-нибудь на этот вопрос.
Вложения
Тип файла: zip ConsApp_FilesAndWords.zip (19.8 Кб, 8 просмотров)
1
6280 / 3565 / 898
Регистрация: 28.10.2010
Сообщений: 5,926
05.12.2011, 20:36 9
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
using System;
using System.Linq;
using System.Text;
using System.IO;
 
class Program
{
    static void Main(string[] args)
    {
        char[] delims = { ' ', '\t', '\n', '!', '.', '?', ',', '"', '\'' };
        char[] vowels = {'а', 'я', 'о', 'ё', 'ы', 'и', 'э', 'е', 'у', 'ю'};
        const string fileName = @"D:text.txt"; ;
        string[] words = File.ReadAllText(fileName, 
            Encoding.Default).Split(delims, StringSplitOptions.RemoveEmptyEntries);
        int max = words.Max(x => x.Except(vowels).ToArray().Length);
        string word = words.Where(x => x.Except(vowels).ToArray().Length == max).First();
        Console.WriteLine("Слово: " + word);
        Console.WriteLine("Количество раз: " + words.Count(x => x == word));
        Console.ReadKey(true);
    }
}
0
29 / 30 / 3
Регистрация: 26.07.2010
Сообщений: 297
05.12.2011, 21:14 10
Donix, извини, совсем забыл, что ответ надо в новый текстовый файл вот исправил:
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
using System;
using System.IO;
 
 
class Program
{
    static void Main(string[] args)
    {
        HardWork hd = new HardWork("text.txt", "out.txt"); //Тут путь к файлу и куда сохранять
        hd.GetAnswer();
    }
}
class HardWork
{
    private StreamReader sr;
    private StreamWriter sw;
    private string str;
    private int max = 0;
    private int kolvo = 0;
    private string slovo;
    private char[] bukvi = new[] { 'а', 'я', 'о', 'ё', 'ы', 'и', 'э', 'е', 'у', 'ю' };
    public HardWork(string path, string outpath)
    {
        sr = new StreamReader(path);
        sw = new StreamWriter(outpath);
    }
    public void GetAnswer()
    {
 
        string[] words;
        str = sr.ReadToEnd();
        words = str.Split(' ');
        slovo = words[0];
        foreach (string word in words)
        {
            foreach (char t in word)
            {
                foreach (char c in bukvi)
                {
                    if (t == c) kolvo++;
                }
            }
            if (max < kolvo)
            {
                max = kolvo;
                slovo = word;
            }
            kolvo = 0;
        }
        foreach (string word in words)
        {
            if (slovo.ToLower() == word.ToLower()) kolvo++;
        }
        sw.WriteLine("Слово " + slovo + " встречается " + kolvo + " раз");
        sw.Close();
        sr.Close();
    }
}
0
05.12.2011, 21:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.12.2011, 21:14
Помогаю со студенческими работами здесь

Найти слово из файла, в котором встретится больше всего букв из слова, введённого с клавиатуры
Имеется файл, в нём написаны слова. С клавиатуры вводится слово с неповторяющимися буквами. Найти и...

Определить номер слова в котором больше всего гласных букв
1. Определить номер слова в котором больше всего гласных букв 2. Найти самое короткое слово в...

Вывести на экран слово, в котором больше всего искомых символов
Вобщем помогите новичку пожалуйста О_о; Условие следующее: вводится с клавы текст, также...

Напечатать слово предложения, в котором больше всего раз встречается заданная буква
Дали задание: С клавиатуры ввести предложения. Определить и напечатать слово с этого предложения,...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru