Как определить, сколько раз каждая буква встречается в строке?

Как мне реализовать подсчет количества повторений каждой буквы в строке? Я написал код, но он выводит всю строку целиком. Не могу понять, как разделить строку на символы и добавить их вместе с их значениями в словарь. <br/> <pre><code class="cs">Dictionary&lt;string, int&gt; letterDictionary = new Dictionary&lt;string, int&gt;();

            string text;
            string textLow;
            string textFormat;
            int count = 0;

            Console.WriteLine("Введите текст: ");
            text = Console.ReadLine();
            textLow = text.ToLower();
            textFormat = textLow.Replace(" ", "").Replace(",", "").Replace("!", "");

            for (int i = 0; i &lt; textFormat.Length; i++)
            {
                if (textFormat[0] == textFormat[i])
                {
                    count++;
                }
            }
            letterDictionary.Add(textFormat, count);

            foreach (var pair in letterDictionary)
            {
                Console.WriteLine($"Буква: {pair.Key}, повторений: {pair.Value}");
            }</code></pre> <br/> <a href="https://www.programiz.com/online-compiler/3Sqyhzi336DzI" rel="nofollow">Ссылка на онлайн-компилятор</a>
  • 10 сентября 2024 г. 9:23
Ответы на вопрос 2
В вашем коде есть несколько моментов, которые требуют исправления. Проблема в том, что вы подсчитываете количество для одной буквы, а затем добавляете его в словарь с ключом, представляющим всю строку, а не каждую букву отдельно. 

Вот пример исправленного кода, который подсчитывает количество повторений каждой буквы в строке и сохраняет их в словаре:

```csharp
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        Dictionary<char, int> letterDictionary = new Dictionary<char, int>();

        Console.WriteLine("Введите текст: ");
        string text = Console.ReadLine();
        string textLow = text.ToLower(); // Приводим к нижнему регистру, чтобы не делать различий между буквами
        string textFormat = textLow.Replace(" ", "").Replace(",", "").Replace("!", "").Replace(".", ""); // Удаляем ненужные символы

        foreach (char letter in textFormat)
        {
            if (letterDictionary.ContainsKey(letter))
            {
                letterDictionary[letter]++;
            }
            else
            {
                letterDictionary[letter] = 1; // Если буква встречается первый раз, добавляем её в словарь
            }
        }

        foreach (var pair in letterDictionary)
        {
            Console.WriteLine($"Буква: {pair.Key}, повторений: {pair.Value}");
        }
    }
}
```

### Объяснение кода:

1. **Словарь `letterDictionary`:** Теперь он использует `char` в качестве ключа вместо `string`, поскольку мы хотим отслеживать отдельные буквы.

2. **Цикл `foreach`:** Мы перебираем каждую букву в отформатированной строке (`textFormat`).

3. **Проверка на существование ключа:** Если буква уже существует в словаре, увеличиваем количество на 1. Если буквы ещё нет, добавляем её в словарь с начальным значением 1.

4. **Вывод результатов:** После завершения подсчета проходимся по словарю и выводим каждую букву и количество её повторений.

Эта реализация должна корректно подсчитывать и выводить количество повторений каждой буквы в вашей строке.
public Dictionary<string, int> Math_str(string value) 
{
  Dictionary<string, int> res = new Dictionary<string, int>()
  
  for(int i=0;i<value.Length();i++)
    {  
      if(!res.ContaintKey(value[i]))
       {
         res.Add(value[i],0);
       }
        res[value[i]]++;
    }

  return res;
}
Похожие вопросы