Ir ao conteúdo
  • Cadastre-se

C Calcular quantas vezes foi digitado um caracter especifico


yasmim7

Posts recomendados

Preciso fazer uma matriz que aceite caracteres como dado de entrada e depois o programa cria uma matriz com esses mesmo caracteres. E no final do programa é pedido que ele diga ao usuário quantas vezes uma letra especifica (por exemplo a letra A) foi digitada. Mas não sei como fazer isso, meu professor me aconselhou a usar vetores auxiliares para testar quantas vezes tal letra foi escrita, mas não entendi muito bem e preciso de ajuda.

 

O código está assim até o momento:

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

#define linha 10
#define coluna 10
int main()
{
	setlocale(LC_ALL, "Portuguese");
	char M[linha][coluna], c;
	int x;
	
	

	for (int i = 0; i < linha; i++)
	{

		for (int j = 0; j < coluna; j++)
		{
			printf("\nDigite um dado: M[%i] [%i]",i , j);
			scanf_s("%c",  &M[i][j]);
			while ((c = getchar()) != '\n' && c != EOF) {};

		}

	}
	

	for (int i = 0; i < linha; i++)
	{

		for (int j = 0; j < coluna; j++)
		{
			printf("\%c", M[i][j]);

		}
		printf("\n");


	}










	return 0;
};

 

 

 

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

@yasmim7 Para exibir a quantidade de vezes que determinada letra foi digitada, você pode usar um vetor de char que represente uma tabela ASC para armazenar essa informação, p.ex.

 

int main(){
    char c, aux[256]={0};
    
    while((c=getchar()) != '\n'){
        aux[c]++;
    }
    printf("O caractere 'a' foi digitado %d vezes", aux['a']);
    return 0;
}

No vetor o caractere a é a posição 97.

 

Dessa forma também é fácil exibir em um loop a quantidade de todos os caracteres digitados.

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

Sua matriz não é tão grande assim, com 10x10 tem claro um máximo de 100 símbolos diferentes, provavelmente menos já que o próprio usuário vai ter que escolher o tamanho e depois digitar as letras uma a uma.

 

Então um par de vetores serviria. E um contador. Algo simples como

	int letras = 0; //quantas letras? linhasxcolunas
	int s[100]; // os simbolos
	int q[100]; // a quantidade de cada um

E é só isso. 
 

- leia as dimensões

 

- leia os valores e coloque na matriz. Ao mesmo tempo --- claro --- veja se a letra que letra que leu está em s[] que tem letras valores dentro

 

- não precisa por em ordem. o vetor é muito pequeno. Apenas olhe um a um. Como o enunciado aparentemente nada diz, faça o simples: todo símbolo é diferente, um ponto, uma vírgula, um número, 'a' ou 'A'.

 

- se é um símbolo novo apenas coloca no vetor e aumenta o contador

 

- se é um repetido apenas aumente o contador correspondente, q [ ]. 

 

- o óbvio: se s[3] vale 'A' e q[3] vale 5 quer dizer o simples: já leu 5 vezes 'A'

 

Só isso.
 

Ao final da leitura você tem todos os resultados. Mostra a matriz e eventualmente entra em um loop onde o usuário pode digitar um símbolo e você diz quantas vezes ele apareceu.

 

 

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

@yasmim7    nesse enunciado não é pedido para que os dados sejam inseridos pelo usuário ,  diz apenas que a matriz aceite caracteres como entrada , e assim pode ser preenchida de outras formas , com por exemplo aleatoriamente com a função rand , e depois de preenchida mostre todos os caracteres que estão na matriz e peça ao usuário escolher um deles e em seguida calcular a qtd de vezes que apareceu e para isso você pode usar dois Loop's mesmo e um contador que a cada caractere igual ao informado incremente o contador e mostrar o resultado na tela   ,  então essa parte de preencher a matriz poderia ser assim  :

#include <stdio.h>
#include <string.h>
#include <locale.h>
#include <time.h>
#define linha 10
#define coluna 10
int main(){
    srand(time(NULL));
	setlocale(LC_ALL,"Portuguese");
	char M[linha][coluna], c;
	int i,j,contador=0;
	for( i=0; i<linha; i++ ){
		for( j=0; j<coluna; j++ ){
			//printf("Digite um dado: M[%i] [%i] ",i , j);
			//scanf("%c",&M[i][j]);
			M[i][j] = (char)rand() % 223+32;// todos caracteres de 32 até 254 da tabela ASCII
			//while ((c = getchar()) != '\n' && c != EOF) {};
		}
	}
	for( i=0; i<linha; i++ ){
		for( j=0; j<coluna; j++ ){
			printf("%2c ", M[i][j]);
		}
		printf("\n");
	}
	printf("Escolha hUm Caractere ");
	scanf("%c",&c);
	for( i=0; i<linha; i++ )
        for( j=0; j<coluna; j++ )
        
         //  aqui faça as comparações e depois desses dois loop's mostre o resultado
  
	return 32768;
};

 

Link para o comentário
Compartilhar em outros sites

Vou repetir o que eu escrevi sobre isso há pouco...

 

Seu programa está muito complicado sem necessidade. 3 matrizes? Não precisa disso. E não é esperto ler primeiro porque não vai mudar nada. Faça as contas enquanto lê. É mais simples e eficiente.

 

E não precisa sequer de uma matriz para testar. Apenas uma sequência de números. Não é preciso fazer um programa inteiro primeiro. Pode fazer pequenos programas. Ninguém vai te culpar, mesmo porque ninguém vai saber. Projetos grandes são todos escritos assim.

  • Obrigado 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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!