Как посчитать количество повторений каждой буквы в строке?

Подскажите как решить задачку? Нужно подсчитать количество повторений каждой буквы в строке. Написал такой код, но он выдаёт строку целиком. Не могу понять как разбить на символы и добавить вместе со значением в словарь.

        Dictionary<string, int> letterDictionary = new Dictionary<string, int>();

        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 < textFormat.Length; i++)
        {
            if (textFormat[0] == textFormat[i])
            {
                count++;
            }
        }
        letterDictionary.Add(textFormat, count);

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

Ссылка на онлайн-компилятор


Ответы (1 шт):

Автор решения: Grundy

Приведенный код выполняет другую задачу, а именно

сколько раз в тексте встречается символ стоящий на первом месте.

Что нужно изменить:

  1. у символов тип char, поэтому в типе словаря нужно поменять тип для ключа Dictionary<char, int> letterDictionary
  2. не нужен отдельный счетчик count - так как подсчитывать нужно каждый символ, а не какой-то определенный
  3. внутри цикла нужно брать из словаря счетчик для конкретного символа, увеличивать его и заносить обратно в словарь
  4. убрать строчку с добавлением в словарь строки letterDictionary.Add(textFormat, count);

В итоге код может выглядеть так:

Dictionary<char, int> letterDictionary = new Dictionary<char, int>();
/* ... */
for (int i = 0; i < textFormat.Length; i++)
{
    var c = textFormat[i]; // берем текущий символ
    letterDictionary[c] = letterDictionary.TryGetValue(c, out int count)?count+1: 1; // считаем его
}

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