Considere os vetores p e f ambos do tipo char. 0 vetor p contém uma palavra e o vetor f contém uma frase. Escrever um programa que determina o número de vezes que a palavra ocorre na frase. Por exemplo, para a palavra “ANA” e a frase “ANA E MARIANA GOSTAM DE BANANA”, a palavra ocorre 4 vezes na frase. Usar a seguinte função para ler caracteres:
int lerCaracteres(char *s, char c[])
{
    int n;
    printf("%s (use # para indicar o fim): ",s);
    n = 0;
    while (1)
    {
        scanf("%c",&c[n]);
        if (c[n] == '#')
            break;
        n++;
    }
    return n;
}
A função lerCaracteres recebe como parâmetros um string (s) e um vetor de caracteres ©. A função lê caracteres até encontrar ‘#’ e retorna o número de caracteres incluídos no vetor c (tamanho do vetor). Para incluir uma palavra de np caracteres em um vetor p, pode-se usar a função lerCaracteres como:
np = lerCaracteres("Palavra",p);

Passo 1

O enunciado pede um programa em C que leia uma palavra e uma frase (ambas vetores de char) usando a função lerCaracteres, e determine quantas vezes a palavra ocorre na frase, incluindo ocorrências sobrepostas.

Passo 2

Primeiro usamos lerCaracteres para preencher o vetor p com a palavra e obter seu tamanho np, e depois para preencher o vetor f com a frase e obter seu tamanho nf.

Passo 3

Para contar as ocorrências, percorremos cada posição i de 0 até nf–np, pois além disso não há espaço para uma ocorrência completa. Em cada i fazemos uma comparação caractere a caractere: para j de 0 até np–1 checamos se f[i+j] é igual a p[j].
Se todos os p[j] coincidirem nessa posição i, incrementamos um contador de ocorrências. No final desse loop teremos o total desejado.

Passo 4

Reunindo tudo, o programa em C fica assim:
#include <stdio.h>
int lerCaracteres(char *s, char c[])
{
int n = 0;
printf("%s (use # para indicar o fim): “, s);
while (1)
{
scanf(”%c", &c[n]);
if (c[n] == ‘#’)
break;
n++;
}
return n;
}
int main()
{
char p[100], f[1000];
int np, nf, i, j, count = 0, match;
np = lerCaracteres(“Palavra”, p);
nf = lerCaracteres(“Frase”, f);
for (i = 0; i <= nf - np; i++)
{
match = 1;
for (j = 0; j < np; j++)
{
if (f[i + j] != p[j])
{
match = 0;
break;
}
}
if (match)
count++;
}
printf(“Número de ocorrências: %d\n”, count);
return 0;
}

Resposta

O programa acima lê a palavra e a frase usando lerCaracteres, percorre a frase comparando substrings de tamanho np e conta todas as ocorrências sobrepostas, imprimindo o resultado.

Exercícios relacionados