Fácil C#

Contando ocorrências com Dictionary

Enunciado

Escreva um programa que leia uma frase e conte quantas vezes cada palavra aparece. Use um Dictionary<string, int> e TryGetValue para atualizar a contagem.

Requisitos

  • Usar Dictionary<string, int> para armazenar as contagens.
  • Utilizar TryGetValue para verificar se a palavra já existe.
  • Imprimir cada palavra e sua contagem no formato palavra: contagem.

Código inicial

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        string frase = "o rato roeu a roupa do rei de roma";
        // Seu código aqui
    }
}

Saída esperada

o: 1
rato: 1
roeu: 1
a: 1
roupa: 1
do: 1
rei: 1
de: 1
roma: 1
Ver dica

Divida a frase com Split(' ') e itere sobre as palavras. Use TryGetValue para obter a contagem atual e depois atualize o dicionário.

Mostrar solução
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        string frase = "o rato roeu a roupa do rei de roma";
        var contagem = new Dictionary<string, int>();

        foreach (string palavra in frase.Split(' '))
        {
            // Tenta obter a contagem atual; se não existir, começa com 0
            contagem.TryGetValue(palavra, out int atual);
            contagem[palavra] = atual + 1;
        }

        foreach (var par in contagem)
        {
            Console.WriteLine($"{par.Key}: {par.Value}");
        }
    }
}

Passo a passo

  1. Criamos um Dictionary<string, int> para associar cada palavra à sua contagem.
  2. Dividimos a frase em palavras usando Split(' ').
  3. Para cada palavra, chamamos TryGetValue para obter a contagem atual; se a palavra não existir, atual recebe 0.
  4. Atualizamos o dicionário com contagem[palavra] = atual + 1.
  5. Por fim, iteramos sobre o dicionário e imprimimos cada par chave-valor.

Por que funciona

O Dictionary permite acesso rápido por chave. Usar TryGetValue evita uma exceção KeyNotFoundException e faz apenas uma busca, ao contrário de verificar com ContainsKey e depois indexar. Assim, o código é seguro e eficiente.

Erros comuns

  • Usar contagem[palavra]++ sem verificar se a chave existe: isso lança KeyNotFoundException na primeira ocorrência. Correção: usar TryGetValue ou contagem[palavra] = contagem.GetValueOrDefault(palavra) + 1.
  • Esquecer de inicializar o dicionário: var contagem = new Dictionary<string, int>(); é necessário.
  • Dividir a frase incorretamente: Split(' ') não lida com múltiplos espaços; nesse caso, use Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries).

Outra forma de resolver

Poderia usar contagem[palavra] = contagem.GetValueOrDefault(palavra) + 1; (disponível no .NET Core 2.0+). É mais conciso, mas TryGetValue é mais explícito e funciona em qualquer versão.

Saída esperada

o: 1
rato: 1
roeu: 1
a: 1
roupa: 1
do: 1
rei: 1
de: 1
roma: 1