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

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

27.10.2019, 12:58. Показов 7072. Ответов 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
 Аватар для Элд Хасп
16124 / 11248 / 2888
Регистрация: 21.04.2018
Сообщений: 33,081
Записей в блоге: 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
 Аватар для Элд Хасп
16124 / 11248 / 2888
Регистрация: 21.04.2018
Сообщений: 33,081
Записей в блоге: 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
 Аватар для Элд Хасп
16124 / 11248 / 2888
Регистрация: 21.04.2018
Сообщений: 33,081
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru