Fazer um programa para:
Receber uma segunda string e contar quantas vezes a segunda string ocorre dentro da primeira.

Passo 1

Beleza, o enunciado diz que a gente precisa fazer um programinha que receba duas strings: uma maior (vamos chamar de “texto”) e uma menor (vamos chamar de “padrão”), e conte quantas vezes esse padrão aparece dentro do texto.
Conteúdo da matéria: manipulação de strings e busca de padrão (substring search).
O que vamos precisar:
  • Saber o tamanho de cada string;
  • Percorrer o texto posição por posição;
  • Comparar pedaços do texto com o padrão;
  • Incrementar um contador quando bater.

Passo 2

Antes de codar, é legal entender a teoria por trás:
  1. Chamamos de n o tamanho do texto e de m o tamanho do padrão, isto é n = |rm texto|, m = |rm padrão|ã
    2) A única forma de contar todas as ocorrências é “deslizar” o padrão sobre o texto, da posição 0 até a posição n - m.
    3) Em cada posição i, a gente pega o pedaço do texto que vai de i até i + m - 1 e compara caracter a caracter com o padrão.
    4) Se todos os m caracteres coincidirem, encontramos uma ocorrência e aumentamos o contador em 1.

Passo 3

Vamos detalhar a solução em “pseudocódigo” passo a passo, imaginando que temos funções simples:
  • tamanho(s) retorna o número de caracteres de s.
  • subtexto(s, i, m) retorna os m caracteres de s a partir de i.
  • igual(x, y) retorna verdadeiro se as strings x e y são idênticas.
Pseudocódigo:
função contarOcorrencias(texto, padrão):
    n ← tamanho(texto)
    m ← tamanho(padrão)
    contador ← 0

    // Percorre todas as posições possíveis
    para i de 0 até n - m faça:
        trecho ← subtexto(texto, i, m)
        se igual(trecho, padrão) então:
            contador ← contador + 1

    retorne contador

Passo 4

Explicando por quê cada etapa é necessária:
  • Precisamos dos tamanhos n e m pra saber quantas posições são válidas.
  • O laço de 0 até n - m garante que o trecho não estoure o fim do texto.
  • Cada subtexto(texto, i, m) corresponde ao que chamamos de texto[ii+m-1].
  • igual(...) faz a comparação caracter a caracter.
Esse método é chamado de “força bruta” em busca de padrão: é simples, mas funciona.

Resposta

Segue o código em Python como exemplo de implementação prática:
def contar_ocorrencias(texto, padrao):
    n = len(texto)
    m = len(padrao)
    contador = 0

    for i in range(n - m + 1):
        if texto[i:i+m] == padrao:
            contador += 1

    return contador

# Exemplo de uso:
# texto   = "abababa"
# padrao  = "aba"
# a função retorna 3, porque "aba" aparece em posições 0, 2 e 4.

Exercícios relacionados