Fazer um programa para:
Receber uma segunda string e contar quantas vezes a segunda string ocorre dentro da primeira.
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:
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:
- Chamamos de
o tamanho do texto e de o tamanho do padrão, isto é
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.
3) Em cada posição, a gente pega o pedaço do texto que vai de até e compara caracter a caracter com o padrão.
4) Se todos oscaracteres 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 des
.subtexto(s, i, m)
retorna oscaracteres de s
a partir dei
.igual(x, y)
retorna verdadeiro se as stringsx
ey
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
em
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. 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.