Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/35: Рейтинг темы: голосов - 35, средняя оценка - 4.69
1 / 1 / 0
Регистрация: 18.11.2017
Сообщений: 57

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

27.10.2019, 12:58. Показов 7119. Ответов 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
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,112
Записей в блоге: 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
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,112
Записей в блоге: 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
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,112
Записей в блоге: 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 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru