Как посчитать количество повторений каждой буквы в строке?
Подскажите как решить задачку? Нужно подсчитать количество повторений каждой буквы в строке. Написал такой код, но он выдаёт строку целиком. Не могу понять как разбить на символы и добавить вместе со значением в словарь.
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
→ Ссылка
Приведенный код выполняет другую задачу, а именно
сколько раз в тексте встречается символ стоящий на первом месте.
Что нужно изменить:
- у символов тип
char
, поэтому в типе словаря нужно поменять тип для ключаDictionary<char, int> letterDictionary
- не нужен отдельный счетчик
count
- так как подсчитывать нужно каждый символ, а не какой-то определенный - внутри цикла нужно брать из словаря счетчик для конкретного символа, увеличивать его и заносить обратно в словарь
- убрать строчку с добавлением в словарь строки
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}");
}