Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
3 / 3 / 4
Регистрация: 16.09.2013
Сообщений: 350

Подсчитать количество букв

27.04.2017, 14:29. Показов 3629. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пытался так :
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        public string alph = "ABCDEFGHIJKLMNOPQRSTUVWXYZАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯabcdefghijklmnopqrstuvwxyzабвгдеёжзийклмнопрстуфхцчшщъьыэюя";
        
        
        public Form1()
        {
            InitializeComponent();
        }
        Entropiya entr = new Entropiya();
        private void button1_Click(object sender, EventArgs e)
        {
           
            entr.Rasschet(richTextBox1.Text, alph,listBox1);
        }
 
        private void radioButton1_CheckedChanged(object sender, EventArgs e)
        {
 
        }
    }
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
class Entropiya
    {
        
 
        public void Rasschet(string text,string alph,ListBox list)
        {  int a=0;
            char[] sym = text.ToCharArray();
            char[] kol = alph.ToCharArray();
            
            for (int i=0; i<sym.Length;i++)
            {
 
                 for(int j=0;j<kol.Length;j++)
               {
                   if (sym[i] == kol[j])
                   {
                       a+=1;
                       list.Items.Add(sym[i]+" : "+a.ToString());
                   }
               } 
            }
       
               
           
            }
        }
Но он просто выводит совпавшие буквы и их номер по циклу
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.04.2017, 14:29
Ответы с готовыми решениями:

Подсчитать общее количество букв в тексте и вывести все их на экран
Дан richTextBox1 в котором есть текст, нужно посчитать сколько раз встречается каждая буква и вывести их все в ряд (ну или в столбик). Я...

Дана строка. Подсчитать количество букв "к" в последнем ее слове
Работа в Form1 Надо объяснить каждый шаг в коде // string s = textBox1.Text; int index = s.LastIndexOf(&quot; &quot;); s =...

Посчитать количество пробелов, количество букв, количество знаков пунктуации и количество всех символов
дан файл, в файле содержатся буквы лат. алфавита, знаки пунктуации, пробелы и цифры. по нажатию на кнопку, посчитать количество пробелов ,...

10
18 / 18 / 8
Регистрация: 11.01.2016
Сообщений: 54
27.04.2017, 15:38
myString.Count(x => x == 'A');
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
27.04.2017, 16:00
Лучший ответ Сообщение было отмечено Stryder как решение

Решение

Stryder,
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
private void button1_Click(object sender, EventArgs e)
{
    string text = "vb4QQQkui37++аыqf**oadfHGF24аыптЛ1О3Р-587h4Q507wh";
    Dictionary<char, int> dict = GetDictionary(text);
    listBox1.Items.Clear();
    foreach(char ch in dict.Keys)
    {
        listBox1.Items.Add(string.Format("{0}\t{1}", ch, dict[ch]));
    }
}
 
public Dictionary<char, int> GetDictionary(string text)
{
    Dictionary<char, int> dict = new Dictionary<char, int>();
    foreach(char ch in text)
    {
        if(Char.IsLetter(ch))
        {
            if (dict.ContainsKey(ch))
                dict[ch]++;
            else
                dict.Add(ch, 1);
        }
    }
    return dict;
}
1
3 / 3 / 4
Регистрация: 16.09.2013
Сообщений: 350
27.04.2017, 17:25  [ТС]
Цитата Сообщение от Даценд Посмотреть сообщение
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public Dictionary<char, int> GetDictionary(string text)
{
    Dictionary<char, int> dict = new Dictionary<char, int>();
    foreach(char ch in text)
    {
        if(Char.IsLetter(ch))
        {
            if (dict.ContainsKey(ch))
                dict[ch]++;
            else
                dict.Add(ch, 1);
        }
    }
    return dict;
}
Спасибо, работает , а можете объяснить, это встроенная функция?Или что?
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
27.04.2017, 17:31
Stryder,
Это самодельный метод (функция), написанный с использованием стандартных классов (Dictionary, Char) и их методов (IsLetter - статический метод класса Char, ContainsKey и Add - экземплярные методы класса Dictionary).
0
3 / 3 / 4
Регистрация: 16.09.2013
Сообщений: 350
28.04.2017, 16:18  [ТС]
ch - это буква? а dict[ch] - это ее кол-во повторений?
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
28.04.2017, 17:44
Stryder,
В Dictionary<char, int> данные хранятся в виде пар ключ-значение.
Символ char является ключом, а количество повторений (int) является значением.
К значению можно обратиться с помощью ключа, т.е. dict[ch] - количество повторений символа ch.
0
3 / 3 / 4
Регистрация: 16.09.2013
Сообщений: 350
29.04.2017, 15:34  [ТС]
Я понял , спасибо, а нельзя модифицировать функцию типо Dictionary<char, int, double>?

Добавлено через 18 часов 2 минуты
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
        public Dictionary<char, double> GetDictionary(string text)
        {
            
            Dictionary<char, double> dict = new Dictionary<char, double>();
            foreach (char ch in text)
            {
                if (Char.IsLetter(ch))
                {
                    if (dict.ContainsKey(ch))
                    { 
 
                    dict[ch]++;
                  
                    
                    }
                    else
 
                        dict.Add(ch,1.0/Convert.ToDouble(text.Length));
                        
                }
            }
            return dict;
Скажи, пожалуйста , мне надо посчитать вероятность появления буквы , в тексте , я немного изменил твой код , все работает, но если буква появляется больше 1 раза то вероятность становится больше единицы , может быть это из за того что там добавляется 1 , при записи?
0
3 / 3 / 4
Регистрация: 16.09.2013
Сообщений: 350
29.04.2017, 15:37  [ТС]
Вот, например
Миниатюры
Подсчитать количество букв  
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
29.04.2017, 15:59
Цитата Сообщение от Stryder Посмотреть сообщение
я немного изменил твой код , все работает, но если буква появляется больше 1 раза то вероятность становится больше единицы
Значит неправильно изменил.
Вот:
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
private void button1_Click(object sender, EventArgs e)
{
    string text = textBox1.Text;
    int count = text.Length;
    Dictionary<char, int> dict = GetDictionary(text);
    listBox1.Items.Clear();
    listBox1.Items.Add("Символ\tКол-во\tВероятность\t\tЭнтропия");
    foreach (char ch in dict.Keys)
    {
        listBox1.Items.Add(string.Format("{0}\t{1}\t{2}\t{3}", ch, dict[ch], (double)dict[ch] / count, 1 / ((double)dict[ch] / count)));
    }
}
 
public Dictionary<char, int> GetDictionary(string text)
{
    Dictionary<char, int> dict = new Dictionary<char, int>();
    foreach (char ch in text)
    {
        if (Char.IsLetter(ch))
        {
            if (dict.ContainsKey(ch))
                dict[ch]++;
            else
                dict.Add(ch, 1);
        }
    }
    return dict;
}
И я не знаю, как энтропию считать. Поэтому выражение 1 / ((double)dict[ch] / count) нужно поменять на правильное.
2
3 / 3 / 4
Регистрация: 16.09.2013
Сообщений: 350
29.04.2017, 17:14  [ТС]
Спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.04.2017, 17:14
Помогаю со студенческими работами здесь

Дана строка. Подсчитать, сколько в ней букв r,k,t.
Дана строка. Подсчитать, сколько в ней букв r,k,t. Помогите с работой. Вроде нужно делать с помощью foreach. Но не могу представить...

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

Подсчитать чего больше (цифр, букв) в последовательности и составить строки только из цифр
Дана последовательность, состоящая из цифр, букв и знаков пунктуации в произвольном порядке. Подсчитать чего больше и составить строки...

Подсчитать и напечатать количество точек
Случайным образом формируются координаты X и Y 100 точек. Диапазон значений координат от -150 до +150. Подсчитать и напечатать количество...

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru