Ir ao conteúdo
  • Cadastre-se

C Contar Letras de uma Mensagem usando Recursividade


Bruno.Ferreira
Ir à solução Resolvido por HeartBreat,

Posts recomendados

Começamos a aprender Recursividade agora e não peguei ainda... Alguém poderia me ajudar?

 

/*4) Faça uma função recursiva (e seu protótipo): Contar_Letra que retorne à quantidade de vezes que uma
Letra ocorre em uma Mensagem (string). Na main, use a função recursiva: Contar_Letra para 100
Mensagens e Letras escolhidas pelo usuário (uma por uma) a cada nova chamada da função.
Use este Protótipo: int Contar_Letra (char *Mensagem, char Letra);*/


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define Tamanho 100
int Contar_Letra (char *Mensagem, char Letra);
int main()
{
    int contador = 0;
    char Mensagem[Tamanho];
    printf("Digite a Mensagem: "); scanf("\n%[^\n]", Mensagem);
    printf("Palavra: %s (Se repete: %i)\n", Letra, Contar_Letra(Letra));
    return 0;
}
int Contar_Letra (char *Mensagem, char Letra)
{
    for(int i; i < 0; i++)
    {
     if(Mensagem == Letra)
     {
         contador ++;
         *Mensagem = '\0';
     }
    }
    Contar_Letra(Mensagem, Letra)
    //if(*Mensagem == '\0')
    //    return 0;
    //else
    //    return 1 + Contar_Letra(Mensagem - 1);
}
 

Link para o comentário
Compartilhar em outros sites

  • Solução

Olha cara, tem varias coisas faltando e outras erradas, a variável "contador" tem que estar declarada como global para que o valor não se perca na recursão(nesse caso especifico), você não pode comparar uma string com um char desse forma ("Mensagem == Letra"), a iteração dentro da função recursiva também não faz sentido algum.Uma das coisas mais importantes na recursão é o caso base, é uma "condição" de parada para a função, nesse caso o '\0' no final da string, você ate colocou mas foi na parte comentada do código.O enunciado pede que o usuário digite uma palavra e uma letra 100 vezes uma de cada vez e que em cada chamada da função seja feita a contagem das letras


Enfim, eu fiz algumas modificações e deixei o mais próximo que o enunciado pede.

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TAM 100
int cont = 0, i = 0;
int Contar_Letra (char Mensagem[], char Letra);
int main(){
	char Mensagem[TAM], Letra;
	int l = 0;
	while(l<TAM){
		printf("Digite a Mensagem: "); 
		gets(Mensagem);
		printf("Digite a Letra: ");
		scanf("%c",&Letra);
    	printf("Se repete: %i\n", Contar_Letra(Mensagem,Letra));
    	setbuf(stdin, NULL);
    	cont = 0;
    	i = 0;
    	l++;
	}
    return 0;
}

int Contar_Letra(char Mensagem[], char Letra){
	if(Mensagem[i] == '\0')
		return cont;
   	if(Mensagem[i] == Letra){
        cont++;
    }
    i++;
    Contar_Letra(Mensagem, Letra);
}

 

Link para o comentário
Compartilhar em outros sites

2 minutos atrás, Bruno.Ferreira disse:

Então mas o enunciado pede que usemos o protótipo proposto que seria:

 

int Contar_Letra (char *Mensagem, char Letra);

 

se você reparar o char *Mensagem é um ponteiro...

 

Ai ja me complica um pouco.

Não tem diferença usar "*Mensagem" de "Mensagem[]", um vetor é basicamente um ponteiro.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...