Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Gustavo Malheiro

C Determinar o número de vezes que uma letra ocorre em uma string

Recommended Posts

Postado (editado)

Olá! Gostaria que alguém me explicasse como posso fazer para saber o número de vezes que determinada letra aparece em uma string.

> Letra escolhida: a

> String digitada pelo usuário: Banana

> Exibido na tela: A letra a aparece 3 vezes na palavra banana.

 

Editado por Gustavo Malheiro
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal! Consegui achar um meio de resolver o problema. Caso alguém esteja com a mesma dúvida, irei disponibilizar o código! 

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <string.h>

int main(void){

	setlocale(LC_CTYPE,"portuguese");
	char palavra[60]; // Um vetor para armazenar a palavra
	char letra[1]; // Um vetor para armazenar a letra
	int i,j = 0; 

	printf("\nDigite uma letra\n");
	scanf("%c",&letra);

	printf("\nDigite uma palavra\n");
	scanf("%s",&palavra);

	for(i=0; i < strlen(palavra); i++ ) { // aqui no parâmetro do for, usei a função strlen() como limite pro loop
            if(letra[1] == palavra[i]) { // utilizei o for e o if para percorrer cada índice do vetor e comparar as strings
                j++; // o j++ está servindo apenas para contar quantas vezes a letra se repete
            }
            else {
                continue; // caso a letra não se repetir, o laço continua
            }
        }

    printf("\nA letra %c aparece %d vezes na palavra %s \n", letra[1] ,j ,palavra); 




    system("pause");
	return 0;
}

 

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
Citação

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <string.h>

int main(void){

	setlocale(LC_CTYPE,"portuguese");
	char palavra[60]; // Um vetor para armazenar a palavra
	char letra[0]; // Um vetor para armazenar a letra  -> vetores começam em  0 não em  1
	int j ,len ;
	j = 0; 
	
	printf("\nDigite uma letra\n");
	scanf("%c",&letra[0]);

	printf("\nDigite uma palavra\n");
	scanf("%s",palavra); // -> inicialização de string não começa com & , iguais os outros tipos
	
	len = strlen(palavra);
	
	for(int i=0 ; i < len ; i++ ) { 
		if(letra[0] == palavra[i]){
			j++; 
		}
            // não é necessário continue , o laço irá continuar se o "if" for incorreto de qualquer forma.
	}

    printf("\nA letra %c aparece %d vezes na palavra %s \n", letra[0] ,j ,palavra); 
	return 0;
	
}

 



Fiz alguns ajustes , umas observações pra melhorar a fluência do código , por exemplo o for(i = 0;i<strlen(string)...
Isso não é legal fazer no for , aparentemente deixa o código menor , mas na prática , toda vez que o for reinicializar no loop , ele faz a contagem do tamanho da string. Então isso aumenta o tempo de execução do código.
Outra coisa , quando for usar scanf pra string , não usa o operador unário "&" ou operador de endereço. 
 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
char letra[0];

@Poisoned00 Isso está errado, na declaração de vetores coloca-se o comprimento do vetor (não índice), não existe nada com comprimento 0.

 

 

@Gustavo Malheiro

char letra[1];

Não deveria ter os colchetes se é apenas 1 caractere, declare como qualquer outra variável:

char letra;

 

O código com correções:

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <string.h>

int main(void){

	setlocale(LC_CTYPE,"portuguese");
	char palavra[60]; // Um vetor para armazenar a palavra
	char letra; // Um CARACTERE
	int i,j = 0; 

	printf("\nDigite uma letra\n");
	scanf("%c",&letra);

	printf("\nDigite uma palavra\n");
	scanf("%s",palavra); //O nome de um vetor já é uma referência, não vai & antes

	for(i=0; i < strlen(palavra); i++ ) { // aqui no parâmetro do for, usei a função strlen() como limite pro loop
            if(letra == palavra[i]) { // utilizei o for e o if para percorrer cada índice do vetor e comparar as strings
                j++; // o j++ está servindo apenas para contar quantas vezes a letra se repete
            }
            /* Já vai continuar mesmo sem esse else, ele é desnecessário
            else {
                continue; // caso a letra não se repetir, o laço continua
            }*/
        }

    printf("\nA letra %c aparece %d vezes na palavra %s \n", letra ,j ,palavra); 




    system("pause");
	return 0;
}

 

  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara adoro quando tu conserta meus códigos kkk aprendo muito contigo ! valeu 

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites
Postado (editado)

Olá.

 

Para complementar, segue algumas sugestões:

 

1#
Prefira usar "espaços" em vem vez de "tabulação", ou seja, a sugestão seria configurar o seu editor de texto para inserir espaços quando pressionar tab.

 

obs.: não tenho uma referência para explicar agora, nem lembro exatamente as vantagens para citar, mas alguns programadores mais experientes já comentaram sobre isso.

 

No DevC++, por exemplo, seria assim:

sem_tabulacao.png

 

 

 

2#

Sobre as características do problema.

 

Vejamos o enunciado:

Em 30/05/2018 às 12:30, Gustavo Malheiro disse:

Olá! Gostaria que alguém me explicasse como posso fazer para saber o número de vezes que determinada letra aparece em uma string.

 

Então, na minha interpretação, ao ser solicitado "o número de vezes que determinada letra aparece", não está se importando se a letra está maiúscula ou minúscula... entretanto, o C e C++ são Case-sensitive, ou seja, distinguem, por exemplo, "A" de "a"... logo, o resultado pode dar errado.

 

Se eu quiser contar os "a" de "Arara", no seu código vai resultar 2, mas pelo argumentado, deveria ser 3!

 

Dica: acho que o comando toupper(), ou similar, ajudaria nesse caso.

 

 

 

3#

Ainda sobre as características...

Em 30/05/2018 às 12:30, Gustavo Malheiro disse:

Olá! Gostaria que alguém me explicasse como posso fazer para saber o número de vezes que determinada letra aparece em uma string.

> Letra escolhida: a

> String digitada pelo usuário: Banana

> Exibido na tela: A letra a aparece 3 vezes na palavra banana.

 

Veja, o enunciado fala de string, ou seja, não especificamente em "uma palavra"... Nesse sentido, o programa deveria receber uma FRASE... podendo ter uma ou mais palavras...

 

 

 

4#

Sobre o cabeçalho do código, sugiro seguintes alterações/correções:

#include <stdio.h> //printf(), scanf()
//#include <stdlib.h>   NÃO UTILIZADA, LOGO NÃO PRECISA DECLARAR
#include <locale.h> //setlocale()
#include <string.h> //strlen()

int main(void) {
    setlocale(LC_CTYPE,"Portuguese_Brazil"); //para os "acentos" funcionarem no console
    //char palavra[60]; // Um vetor para armazenar a palavra    "ser vetor já está implícito com [] e seria melhor falar em "frase"
    //char letra;       // Um CARACTERE                         "ser um caractere também já é implícido da declaração em si"
    char frase[60]; //frase a ser verificada       "ou seja, comentário refererenete a funcionalidade da variável
    char letra;     //letra a ser verificada    
    //int i,j = 0;
    int i; //auxiliar utilizado para percorrer o vetor
    int qtd = 0; //quantidade de vezes que a letra aparece

 

Ai faria os ajustes no código...

 

***

 

Por ai vai.

 

Caso queira implementar essas sugestões, sugiro FAZER POR ETAPAS... Por exemplo, primeiro só se preocupe em fazer aceitar maiúsculas e minúsculas... só depois tente fazer ler uma frase OU ajustar o cabeçalho. Não tente fazer mais de uma alteração de vez.

 

 

No aguardo.

Editado por Simon Viegas

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×