Considere os vetores
e
ambos do tipo char. 0 vetor
contém uma palavra e o vetor
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
, pode-se usar a função lerCaracteres como:
np = lerCaracteres("Palavra",p);
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;
}
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.
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;
}
#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.