Сколько раз встречается слово в тексте
Юзер вводит большой текст. Требуется создать частотный словарь. это словарь в котором ключ уникальное слово из текста, а значение числовое. Сколько раз в тексте встречается данное слово?
Машина машина собака машина собака свинья
Машина 3
собака 2
свинья 1
Что я пробовал: Я инициализировал словарь, и разделил введенный юзером текст с помощью Split. Затем, я проверяю с помощью счетчика, одинакового ли нынешнее слово со следующим. Если одинаково, добавляю в копилку. Ошибка: Индекс вне границ
var Dictionary = new Dictionary<string, string>();
Console.WriteLine("Вводи большой текст");
string text = Console.ReadLine();
string[] newText = text.Split(' ');
int counterRepeat = 0;
for (int i = 0; i < newText.Length; i++)
{
if (newText[i] == newText[i + 1])
{
counterRepeat++;
}
}
Ответы (2 шт):
Следует лучше пройтись по массиву слов и сохранять каждый новый ключ в словарь с сопоставленным числом равным единице, а если в словаре уже есть такой ключ, значит нужно прибавить к значению, лежащему под этим ключом единицу, кстати, словарь должен быть типа строка - число, а не строка - строка.
Вот реализация:
using System;
using System.Collections.Generic;
public class Counter
{
public static void Main(string[] args)
{
var counts = new Dictionary<string, int>();
Console.Write("Input your text: ");
string text = Console.ReadLine();
string[] words = text.Split(' ');
// Пробегаемся по полученную после разделения текста массиву слов и складываем в словарь
foreach(var word in words) {
if (!counts.ContainsKey(word.ToLower())) counts.Add(word.ToLower(), 1);
else counts[word] += 1;
}
// Пробегаемся по словарю и выводим все элементы
foreach(var pair in counts) {
Console.WriteLine(pair.Key + ": " + pair.Value);
}
}
}
Самый простой вариант сделать то, что вам нужно, - это LINQ:
var text = "Машина машина собака машина собака свинья";
var dictionary = text.Split()
.GroupBy(word => word) // группируем одинаковые слова
.ToDictionary(group => group, group => group.Count()); // превращаем группы в словарь