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

Найти символ в строке, встречающийся наибольшее и наименьшее число раз

27.10.2019, 12:58. Показов 7139. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дана строка. Найти символ в строке, встречающийся наибольшее и наименьшее число раз.Написал вот такой код:
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
using System;
 
public class Characters
{
    public static void Main()
    {
        String str;
        Console.Write("Введите строку или предложение :  ");
        str = Console.ReadLine();
 
        int[] freq = new int[str.Length];
        char minChar = str[0], maxChar = str[0];
        int i, j, min, max;
 
        // Преобразует данную строку в массив символов 
        char[] string1 = str.ToCharArray();
 
        // Считаем каждое слово в заданной строке и сохраняем в массиве freq   
        for (i = 0; i < string1.Length; i++)
        {
            freq[i] = 1;
            for (j = i + 1; j < string1.Length; j++)
            {
                if (string1[i] == string1[j] && string1[i] != ' ' && string1[i] != '0')
                {
                    freq[i]++;
 
                    // Установить string1 [j] в 0, чтобы избежать печати посещенного символа  
                    string1[j] = '0';
                }
            }
        }
 
        // Определяем минимальные и максимальные встречающиеся символы  
        min = max = freq[0];
        for (i = 0; i < freq.Length; i++)
        {
 
            // Если min больше количества символа   
            // затем сохраняем количество в min и соответствующий символ в minChar  
            if (min > freq[i] && freq[i] != '0')
            {
                min = freq[i];
                minChar = string1[i];
            }
            // Если max меньше количества символа   
            // затем сохраняем количество в max и соответствующий символ в maxChar  
            if (max < freq[i])
            {
                max = freq[i];
                maxChar = string1[i];
            }
           
        }
 
        Console.WriteLine("\nМинимальный встречающийся символ :  " + minChar);
        Console.WriteLine("\nМаксимальный встречающийся символ :  " + maxChar);
        
 
        Console.Write(new string('*', 40));
        Console.WriteLine("\nХорошо поработали, молодцы !");
        Console.ReadLine();
    }
}
Но если я ввожу например слово КОТ,программа выдает мин. мак. первого символа,как сделать так что-бы программа вывела например: " Количество всех символов одинаково"
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.10.2019, 12:58
Ответы с готовыми решениями:

Определить, какой символ встречается в строке подряд наибольшее число раз
Задана строка символов. Определить, какой символ встречается в этой строке подряд наибольшее число раз. В ответе указать символ, образующий...

Найти и напечатать символ, встречающийся в тексте максимальное количество раз
Строка, введенное в режиме диалога, содержит простое предложение, в котором слова отделяются символом «пробел». Найти и напечатать символ,...

Найти самый часто встречающийся символ в строке
Здрасьте) Нужно найти самый часто встречающийся символ в строке, которая вводится с клавиатуры. Как это сделать?

12
1 / 1 / 0
Регистрация: 18.11.2017
Сообщений: 57
03.11.2019, 12:42  [ТС]
Здравствуйте,уважаемые форумчане!
Неужели ни у кого нет ни каких мыслей по этому поводу?
0
 Аватар для jester
352 / 247 / 76
Регистрация: 18.03.2016
Сообщений: 979
03.11.2019, 13:09
Shaman_64,
Подсчет символов в строке

https://vk.com/topic-38655318_32721777
0
 Аватар для kotAV
142 / 108 / 57
Регистрация: 15.09.2017
Сообщений: 425
03.11.2019, 13:30
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
        public static void Main()
        {
            var s = Console.ReadLine();
 
            var maxcount = s.GroupBy(x => x).Aggregate((min, x) => Comparer<int>.Default.Compare(x.Count(), min.Count()) > 0 ? x : min).First();
            var mincount = s.GroupBy(x => x).Aggregate((min, x) => Comparer<int>.Default.Compare(x.Count(), min.Count()) < 0 ? x : min).First();
 
            if (mincount != maxcount)
            {
                Console.WriteLine($"Реже всего встречающийся символ: '{mincount}'");
                Console.WriteLine($"Чаще всего встречающийся символ: '{maxcount}'");
            }
            else
            {
                Console.WriteLine($"Реже и чаще всего встречающийся символ: '{mincount}'");
            }
 
 
            Console.ReadKey();
        }
Ужасно по производительности, но короче работает
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,142
Записей в блоге: 2
03.11.2019, 13:31
Shaman_64, неужели нельзя воспользоваться поиском по разделу?

Простая реализация метода возвращающая символы встречающиеся наибольшее количество раз
C#
1
2
3
4
5
6
public static IEnumerable<char> MoreChars(string line)
        => line.GroupBy(ch => ch) // Группировка по символам
                   .GroupBy(gr => gr.Count()) // Группировка по количеству
                    .OrderByDescending(gr => gr.Key) // Сортировка по убыванию частоты
                    . First () // Получение группы наиболее часто встречающихся символов
                     . Select (gr => gr.Key); // Возврат последовательности символов
3
 Аватар для kotAV
142 / 108 / 57
Регистрация: 15.09.2017
Сообщений: 425
03.11.2019, 13:42
Ну, доработаю метод Элд Хасп.

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
        public static IEnumerable<char> MoreChars(this string line)
        => line.GroupBy(ch => ch) // Группировка по символам
                   .GroupBy(gr => gr.Count()) // Группировка по количеству
                    .OrderByDescending(gr => gr.Key) // Сортировка по убыванию частоты
                    .First() // Получение группы наиболее часто встречающихся символов
                     .Select(gr => gr.Key); // Возврат последовательности символов
 
        public static IEnumerable<char> LessChars(this string line)
        => line.GroupBy(ch => ch) // Группировка по символам
                   .GroupBy(gr => gr.Count()) // Группировка по количеству
                    .OrderBy(gr => gr.Key) // Сортировка по возрастанию частоты
                    .First() // Получение группы наиболее часто встречающихся символов
                     .Select(gr => gr.Key); // Возврат последовательности символов
 
        public static void Main()
        {
            var s = Console.ReadLine();
 
            var maxcount = s.MoreChars().First();
            var mincount = s.LessChars().First();
 
            if (mincount != maxcount)
            {
                Console.WriteLine($"Реже всего встречающийся символ: '{mincount}'");
                Console.WriteLine($"Чаще всего встречающийся символ: '{maxcount}'");
            }
            else
            {
                Console.WriteLine($"Реже и чаще всего встречающийся символ: '{mincount}'");
            }
 
 
            Console.ReadKey();
        }
Не знаю, но мне кажется, что мой метод побыстрее будет. Да и выглядит красивее)
1
 Аватар для jester
352 / 247 / 76
Регистрация: 18.03.2016
Сообщений: 979
03.11.2019, 13:55
Элд Хасп, что это? Зачем?

kotAV, есть стандартные мин макс. Aggregate только усложняет код.

Добавлено через 8 минут
Элд Хасп, не прочитал описание, извини.
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Простая реализация метода возвращающая символы встречающиеся наибольшее количество раз
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,142
Записей в блоге: 2
03.11.2019, 14:03
kotAV, метод возвращает не один символ, а коллекцию символов.
То есть из строки "аббвв" он вернёт 'б' и 'в'.
Ваш же вариант возвращает только один символ.
2
 Аватар для jester
352 / 247 / 76
Регистрация: 18.03.2016
Сообщений: 979
03.11.2019, 14:19
Лучший ответ Сообщение было отмечено Shaman_64 как решение

Решение

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
public static (IEnumerable<char> min, IEnumerable<char> max) GetMinMaxSymbol(string line)
    {
        var d = line.GroupBy(ch => ch).ToDictionary(chGroup => chGroup.Key, chGroup => chGroup.Count());
        
        int maxCount = d.Max(x => x.Value);
        int minCount = d.Min(x => x.Value);
        
        var minL = new List<char>(); 
        var maxL = new List<char>();
        
        foreach(var a in d)
        {
            if(a.Value == maxCount)
                maxL.Add(a.Key);
            else if(a.Value == minCount)
                minL.Add(a.Key);
        }
 
        return (minL, maxL);
    }
    
    public static void Main()
    {
        Console.WriteLine("Hello Woorld!");
        
        var res = GetMinMaxSymbol("Hello Woorld!!!");
        
        Console.WriteLine("Min: " + string.Join(", ", res.min));
        Console.WriteLine("Max: " + string.Join(", ", res.max));
    }
1
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
03.11.2019, 15:48
Решение через NETSquirrel для поиска символов с наибольшим количеством повторений:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
using NETSquirrel.Extensions;
using System.Linq;
 
namespace NETSquirrelApplicationTest
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            var s = "aabbbcccll".PrintLine();
            var maxRepeation = s.GroupBy(z => z).Max(gr => gr.Count());
            var result = s.Where(ch => s.Count(y => y == ch) == maxRepeation);
 
            $"The following chars repeats {maxRepeation} times:".PrintLine();
            result.Distinct().PrintLine();
        }
    }
}
1
1 / 1 / 0
Регистрация: 18.11.2017
Сообщений: 57
03.11.2019, 18:35  [ТС]
Спасибо всем за помощь,буду переваривать...

Добавлено через 12 минут
Цитата Сообщение от kotAV Посмотреть сообщение
Ну, доработаю метод Элд Хасп.
..........
Не знаю, но мне кажется, что мой метод побыстрее будет. Да и выглядит красивее)
Пытаюсь запустить Ваш код,выдает ошибки...(((
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,142
Записей в блоге: 2
03.11.2019, 19:27
Лучший ответ Сообщение было отмечено Элд Хасп как решение

Решение

Shaman_64, где и какие ошибки?
Попробуйте так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
       public static IEnumerable<char> MoreChars(string line)
        => line.GroupBy(ch => ch) // Группировка по символам
                   .GroupBy(gr => gr.Count()) // Группировка по количеству
                    .OrderByDescending(gr => gr.Key) // Сортировка по убыванию частоты
                    .First() // Получение группы наиболее часто встречающихся символов
                     .Select(gr => gr.Key); // Возврат последовательности символов
 
        public static IEnumerable<char> LessChars(string line)
        => line.GroupBy(ch => ch) // Группировка по символам
                   .GroupBy(gr => gr.Count()) // Группировка по количеству
                    .OrderBy(gr => gr.Key) // Сортировка по возрастанию частоты
                    .First() // Получение группы наиболее редко встречающихся символов
                     .Select(gr => gr.Key); // Возврат последовательности символов
         public static void Main()
        {
            var s = Console.ReadLine();
 
                Console.WriteLine($"Реже всего встречающиеся символы: " + string.Join (", ", LessChars(s)));
                Console.WriteLine($"Чаще всего встречающиеся символы: " + string.Join (", ", MoreChars(s)));
 
            Console.ReadKey();
        }
1
1 / 1 / 0
Регистрация: 18.11.2017
Сообщений: 57
03.11.2019, 19:59  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Shaman_64, где и какие ошибки?
Попробуйте так:.....
Так работает,спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.11.2019, 19:59
Помогаю со студенческими работами здесь

Символ, встречающийся в тексте максимальное количество раз
Найти и напечатать символ, встречающийся в тексте максимально. - Как это вообще делается?

Если символ в данной строке встречается один раз, в конце строки добавлять ещё раз этот символ
Помогите с задачей на C# Ввести строку символов. Если символ в данной строке встречается один раз, в конце строки добавлять ещё раз этот...

Как найти число, которое повторяется наибольшее количество раз?
textBox1 получает текст: 300 301 301 301 300 300 301 302 302

Одномерные массивы. Найти число, встречающееся наибольшее количество раз
Задан массив целых чисел от -100 до 100. Найти число, встречающееся наибольшее количество раз

Определить буквы, которые встречаются наибольшее и наименьшее количество раз
В общем, задача такая: Дана строка слов. Определить буквы, которые встречаются наибольшее и наименьшее количество раз. Я написал...


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

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

Новые блоги и статьи
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru