• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

joaotavares

Contar ocorrências de uma palavra numa string

10 mensagens neste tópico

Escreva e teste uma função int conta(char frase[],char palavra[]) que recebendo uma frase e uma palavra do utilizador, indique quantas vezes essa palavra invertida aparece na frase.

Nota: Palavras escritas com maiúsculas ou minúsculas devem ser consideradas palavras diferentes.

Exemplo:

Frase 1: A Ana foi ao cinema e Ao parque

Palavra: ao

Resultado: A palavra oa apareceu 1 vez na frase

Não consigo completar a funçao  :eek: se alguem pudesse ajudar agradecia

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens que fazer duas coisas:

a) inverter a palavra do utilizador

:D verificar se a palavra invertida existe na frase

Em qual é que tás a ter problema?

Mete aqui o código que já escreveste, que de certeza que alguém te ajuda a ultrapassar as dificuldades.

Nota: eu não consigo encontrar a palavra "oa" na frase "A Ana foi ao cinema e Ao parque".

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Explica melhor o problema, é que eu tb nao consigo encontar a palavra "oa" na frase  :eek:

Cumprimentos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O enunciado tem erros a palavra que procuram no exemplo e "ao" e querem saber quantas vezes aparece na frase,maiuscula e minusculas sao consideradas diferentes.

#include <stdio.h>
#include <string.h>
#define NMAX 200

int conta (char frase [], char palavra [])
{
   int i,count=0; 
   for(i=0; i<strlen(frase) ; i++) /*percorre toda a string frase*/
            {
                            while( frase[i] == palavra [i] && i < strlen(palavra))
                            {
                                   count++;
                            }
            }
   return count;  





}    
        
main()
{
      char f[NMAX];
      char p[20];
      
      printf("Escreva uma frase:");
      gets(f);
      printf("Escreva uma palavra:");
      scanf("%s", p);
      printf(" Frase:%s\n Palavra:%s\n Resultado:A palavra %s apareceu %d vez na frase ",f,p,p,conta);
}

   

o meu problema esta em conseguir procurar a palavra na frase. o indice de palavra so pode ir ate ao comprimento da palavra mas o da frase e maior e tenho de percorrer toda a frase e comparar palavra a palavra

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Então já nao é preciso inverter a palavra certo?

Já agora não uses o gets para ler da consola o gets não se deve usar é muito perigoso  ;), usa antes o fgets(*variável,tamanho a ler, stdin )

Quanto a procurar a palavra dentro da frase, vê o tópico  Verificar se uma string está contida noutra, eu escrevi la uma função que faz isso.

Cumprimentos.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ora essa, estamos aqui pra ajudar, se não conseguires resolver com essa função, da o feedback, talvez possa escrever uma outra função que faça o que queres.

Cumprimentos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ja vi a outra funçao e nao percebi muito bem nao da para criar uma sem utilizar apontadores???

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Dar dá, mas penso que a solução sem apontadores é mais complicada, o que nao percebes-te na função?

cumprimentos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

/* ... */
int conta (char frase [], char palavra [])
{
   int i,count=0; 
   for(i=0; i<strlen(frase) ; i++) /*percorre toda a string frase*/
            {
                            while( frase[i] == palavra [i] && i < strlen(palavra))
                            {
                                   count++;
                            }
            }
   return count;  
}
/* ... */

Vamos lá estudar o teu código passo a passo.

Suponhamos que a função é chamada com os exemplos do enunciado.

conta("A Ana foi ao cinema e Ao parque", "ao");

começo do ciclo for
i é 0
  while não entra porque frase[0] != palavra[0] ('A' != 'a')
i é 1
  while não entra porque frase[1] != palavra[1] (' ' != 'o')
i é 2
  while não entra porque frase[2] != palavra[2] ('A' != '\0')
i é 3
  BOOM! palavra[3] não existe

Para já, tens que rever a maneira como comparas os elementos de frase com os elementos de palavra.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora